Benutzer:Koerpertraining/js/filterList.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
(() => {
	
  console.log("load filterList.js");

  var filterFunctions = [];

  if (document.readyState == 'loading') {
    document.addEventListener("DOMContentLoaded", init);
  } else {
    init();
  }

  function addFilter(text, func, apply) {
    var num = filterFunctions.length;
    if (num == 0) addFilterNavBar();
    filterFunctions.push(func);
    
    var a = document.createElement("a");
    a.onclick = () => applyFilter(num);
    a.text = text;

    var span = document.createElement("span");
    span.id = 'listFilter_stats' + num;
    
    document.getElementById("listFilterNavBar")
      .append(" | ", a, " (", span, ")");

    applyFilter(num, !apply);
  }

  function addFilterNavBar() {
    var ul = document.getElementById("bodyContent").getElementsByTagName("ul")[0];
    var div = document.createElement("div");
    div.setAttribute("id", "listFilterNavBar");
    
    var a = document.createElement("a");
    a.onclick = showAll;
    a.text = "Alle";

    div.append('Filter: ', a, ' (' + ul.getElementsByTagName("li").length + ')');
    ul.parentNode.insertBefore(div,ul);
  }
  
  function init() {
    console.log("init filterList.js");
    switch (mediaWiki.config.get("wgCanonicalSpecialPageName")) {
    case "Contributions":
      addFilter("Ungesichtete Version", hasClassFilter('flaggedrevs-pending'));
      addFilter("Ungesichtete Artikel", hasClassFilter('flaggedrevs-unreviewed'));
      addFilter("Aktuell", searchFilter('<span class="mw-uctop">aktuell</span>'));
      break;
    }
   }

  function applyFilter(num, countonly) {
    var func = filterFunctions[num];
    var removed = 0;
    var ul = document.getElementById("bodyContent").getElementsByTagName("ul")[0];
    var lis = ul.getElementsByTagName("li");

    for (var i=0; i < lis.length; i++) {
      var li = lis[i];
      if (func(li)) {
        if (!countonly) li.setAttribute("style", "display:none");
        removed++;
      }
    }
    document.getElementById("listFilter_stats" + num).innerHTML =
      lis.length - removed;
  }

  function searchFilter(text) {
    return function(li) {
      return li.innerHTML.indexOf(text) == -1;
    };
  }

  function hasClassFilter(clazz) {
    return function(li) {
  	  return !li.classList.contains(clazz);
    };
  }

  function showAll() {
    var ul = document.getElementById("bodyContent").getElementsByTagName("ul")[0];
    var lis = ul.getElementsByTagName("li");
    for (var i=0; i < lis.length; i++) {
      lis[i].setAttribute("style", "");
    }
  }

})();