MediaWiki:Gadget-CatNavi.js

Aus Wiktionary, dem freien Wörterbuch
//<nowiki>

// begin namespace: foCatNavi
(function( _public, $, undefined ) {

var browseCat = "";
var catLinks;

_public.init = function ()
{

  var pv = mw.util.getParamValue('cnCategory');
  if (pv && pv.length > 0) {
    browseCat = pv;
    catLinks = document.getElementById("mw-content-text");  //old id="firstHeading"
    catLinks.insertAdjacentHTML("afterbegin",'<div id="gadgets"></div>');
    catLinks = document.getElementById("gadgets");
  } else {
    catLinks = document.getElementById("mw-normal-catlinks");  //id="mw-hidden-catlinks"
    if (catLinks) {
      // Alle Links aus der Liste, die auch existieren
      var catLinksList = catLinks.querySelectorAll("li a");
      for (var i = 0; i < catLinksList.length; i++) {
        if (browseCat == "") {  // erste gefundene Kategorie wählen
          browseCat = "Kategorie:" + catLinksList[i].innerText;
        }
        if (catLinksList[i].title.indexOf('(') > 0) {  // erste gefundene Kategorie mit '(' wählen
          browseCat = "Kategorie:" + catLinksList[i].innerText;
          break;   // leave for loop
        }
      }
      catLinks = document.getElementById("catlinks");  // Aufhänger
    }
  }

  if (browseCat != "") {
    catLinks.insertAdjacentHTML("afterend",
      '<div class="catlinks" style="font-size: small; text-align: center; margin-bottom: 1em">' +
      '<ul style="margin: 0">' +
      '<li id="liL5"></li><li id="liL4"></li><li id="liL3"></li><li id="liL2"></li><li id="liL1"></li>' +
      '</ul><span style="font-size: large" title="Einträge aus der ' + browseCat.replace(/_/g, " ") +
      '">⇐ ' + '<a href="' + buildUrl2(browseCat,'') + '">📖</a> ⇒</span>' +
      '<ul style="margin: 0">' +
      '<li id="liR1"></li><li id="liR2"></li><li id="liR3"></li><li id="liR4"></li><li id="liR5"></li>' +
      '</ul></div>'
    );

    var url = buildApi('',
      "action=query&list=categorymembers&cmnamespace=0&cmprop=title&cmlimit=9&format=json");

    $.post(url, {
      cmtitle: browseCat,
      cmdir: "descending",
      cmstartsortkeyprefix: mw.config.get("wgPageName").replace(/_/g, " ")
    }, handleResponseCatsDesc);

    $.post(url, {
      cmtitle: browseCat,
      cmdir: "ascending",
      cmstartsortkeyprefix: mw.config.get("wgPageName").replace(/_/g, " ")
    }, handleResponseCatsAsc);

  }

};


_public.initCat = function ()
{
  // Auf den Kategorieseiten einen Eventhandler aktivieren, um Memberseiten mit CatNavi zu öffnen
  $("#mw-pages li a").each(function(index, element) {
    element.addEventListener("click", function(event) {
      event.stopPropagation();
      event.preventDefault();
      var url = buildUrl2(this.innerText,"&cnCategory=" +
        mw.util.wikiUrlencode(mw.config.get("wgPageName")));
      location.href = url;
    }); 
  });
};


_public.config = function ()
{
  // toDo
};


_public.help = function (chapter) {
  window.location.href = mw.config.get("wgServer") + mw.config.get("wgScript")
     + "?title=" + mw.util.wikiUrlencode("Hilfe:CatNavi");
};


function handleResponseCatsAsc(data) {

  if (data.query !== undefined && data.query.categorymembers !== undefined) {
    var dqc = data.query.categorymembers;
    var title = mw.config.get("wgPageName").replace(/_/g, " ");
    var liIdx = -1;

    for (var i = 0; i < dqc.length; i++) {
      if (liIdx >= 0 && liIdx <= 5) {  // skip until this title
        liIdx++;
        var lix = document.getElementById("liR" + liIdx);
        if (lix) {
          lix.innerHTML = '<a href="' + buildUrl2(dqc[i].title,"&cnCategory=" + mw.util.wikiUrlencode(browseCat)) +
            '">' + dqc[i].title + '</a>';
        }
      }
      if (dqc[i].title == title) {  // start processing
        liIdx = i;
      }
    }

  }

}


function handleResponseCatsDesc(data) {

  if (data.query !== undefined && data.query.categorymembers !== undefined) {
    var dqc = data.query.categorymembers;
    var title = mw.config.get("wgPageName").replace(/_/g, " ");
    var liIdx = -1;

    for (var i = 0; i < dqc.length; i++) {
      if (liIdx >= 0 && liIdx <= 5) {  // skip until this title
        liIdx++;
        var lix = document.getElementById("liL" + liIdx);
        if (lix) {
          lix.innerHTML = '<a href="' + buildUrl2(dqc[i].title,"&cnCategory=" + mw.util.wikiUrlencode(browseCat)) +
            '">' + dqc[i].title + '</a>';
        }
      }
      if (dqc[i].title == title) {  // start processing
        liIdx = i;
      }
    }

  }

}


function addCORS(){
  if (window.location.hostname.indexOf(".m.") >= 0) {  // mobile site
    return "origin=" + window.location.protocol + "//" + window.location.hostname + "&";
  }
  return "";
}

function buildServer() {
  if (window.location.hostname.indexOf(".m.") >= 0) {  // mobile site
    return mw.config.get("wgServer").replace(".", ".m.");
  }
  return mw.config.get("wgServer");
}

function buildApi(t,p) {
  return buildServer() + mw.config.get("wgScriptPath") + "/api.php?" + addCORS() +
         p + mw.util.wikiUrlencode(t);
}

function buildUrl2(t,p) {
 return buildServer() + mw.config.get("wgScript")+"?title="+mw.util.wikiUrlencode(t)+p;
}

// end namespace: foCatNavi
}( window.foCatNavi = window.foCatNavi || {}, jQuery ));


if (mw.config.get("wgAction") == "view") {
  var ns = mw.config.get("wgNamespaceNumber");
  if (ns == 14) {   // Kategorie:
    jQuery(document).ready(foCatNavi.initCat);
  }
  if (ns == 0) {
    jQuery(document).ready(foCatNavi.init);
  }
}

if (mw.config.get("wgPageName") == "Hilfe:CatNavi" && mw.config.get("wgAction") == "view") {
  jQuery(document).ready(foCatNavi.config);
}

//</nowiki>