Benutzer:PDD/markAdmins.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
//***********************************************************************
// Doku dieses Gadgets: [[Wikipedia:Helferlein/markAdmins]]

// Skript ursprünglich von [[Benutzer:Euku]], 28. Dez. 2005
// Ex-Admin-Markierung von [[Benutzer:Sir]] und [[Benutzer:Olliminatore]]
// Adaptierung/zusätzliche Markierungen/Fixes: [[Benutzer:PDD]]
// Aufgeräumt & beschleunigt: [[Benutzer:Littl]]
// Etwas umgeräumt und potentielle Skinabhängigkeit entfernt: [[Benutzer:Guandalug]]
// Daten nach markAdmins-data.json ausgelagert, etc.: [[Benutzer:Count Count]]
//
// Alle Admins können die Datenbasis unter https://de.wikipedia.org/wiki/Benutzer:CountCountBot/markAdmins-data.json
// aktualiseren
//
//***********************************************************************

// <nowiki>

(function(mw, $) {

  $.getJSON(mw.config.get('wgScriptPath') + '/index.php?action=raw&ctype=application/json&title=Benutzer:CountCountBot/markAdmins-data.json', function(data) {
    mw.libs.markAdmins = {};
    mw.libs.markAdmins.data = data;
    mw.hook('wikipage.content').add(function(content) { annotateUserLinks(); });
  });

  function annotateUserLinks() {
    // Jede der folgenden Variablen kann in der eigenen monobook.js/vector.js/common.js vorbelegt werden.
    // Getestet wird jeweils die Ausnahme, Standard ist jeweils das Gegenteil davon.
    var markadmins = window.markadmins !== false;
    var markcomadmins = window.markcomadmins === true;
    var markwdadmins = window.markwdadmins === true;
    var markexadmins = window.markexadmins === true;

    var markarbcom = window.markarbcom !== false;
    var markoversight = window.markoversight !== false;
    var markcheckuser = window.markcheckuser !== false;

    // Vorzeitiger Abbruch, wenn es nichts zu tun gibt.
    if (!markadmins && !markcomadmins && !markwdadmins && !markexadmins)
      return;

    var marksubpages = window.marksubpages === true;
    var dontmarkmyself = window.dontmarkmyself === true;

    // Die Markierungen dürfen nie leer sein, das wird hier sichergestellt.
    var markatxt = window.markatxt || 'A';
    var markbureautxt = window.markbureautxt || 'B';
    var markstewtxt = window.markstewtxt || 'S';
    var markrenatxt = window.markrenatxt || 'A-Ren';

    var markcomatxt = window.markcomatxt || 'Com-A';
    var markwdatxt = window.markwdatxt || 'WD-A';

    var markexatxt = window.markexatxt || 'Ex-A';

    var markoversighttxt = window.markoversighttxt || 'OS';
    var markcheckusertxt = window.markcheckusertxt || 'CU';
    var markombudsmantxt = window.markombudsmantxt || 'Omb';
    var markarbcomtxt = window.markarbcomtxt || 'SG';

    // Ende der vordefinierbaren Variablenwerte

    var isSpecial = mw.config.get('wgCanonicalNamespace') == "Special";
    var isHistory = mw.config.get('wgAction') == 'history';
    var isUserpage = mw.config.get('wgCanonicalNamespace') == "User" || mw.config.get('wgCanonicalNamespace') == "User_talk";
    var isTalk = mw.config.get('wgNamespaceNumber') % 2 == 1;
    var isProject = mw.config.get('wgCanonicalNamespace') == "Project";
    var isFile = mw.config.get('wgCanonicalNamespace') == "File";
    var isHelp = mw.config.get('wgCanonicalNamespace') == "Help";
    var isDiff = mw.util.getParamValue('diff') !== null;

    var jsonData = mw.libs.markAdmins.data;

    if (isSpecial || isHistory || isUserpage || isTalk || isProject || isFile || isHelp || isDiff) {
      var i;
      var aNode;
      var allanchors = document.getElementsByTagName("A");
      var allanchorsuser = [];
      var followupmark;
      var searchExp = /\/wiki\/Benutzer(in)?([ _]Diskussion)?:(.+)/;
      var searchExpTalk = /[ _]Diskussion:/;
      var marker;
      var mainpageanchor;

      mw.util.addCSS('span.adminMark { font-weight: bold; background-image:none !important; }');

      for (i = 0; i < allanchors.length; i++) {
        aNode = allanchors[i];
        mainpageanchor = true;
        talkpageanchor = false;
        // if it's a link to a user
        if ((href = aNode.getAttribute("href")) && (searchExp.exec(href) != null)) {
          currUser = searchExp.exec(href)[3];
             /* if (isUserpage) */ currUserClean = currUser.replace(/\/.*/, '');
          if (currUserClean != currUser) mainpageanchor = false;
          if (searchExpTalk.exec(href) != null) talkpageanchor = true;

          if (mainpageanchor) allanchorsuser[i] = currUserClean;
          else allanchorsuser[i] = "";

          followupmark = false;
          if (i > 0)
            if ((currUserClean == allanchorsuser[i - 1]) && talkpageanchor)
              followupmark = true;

          currUser = currUserClean;
          marker = [];

          if (markadmins) {
            // is this user an admin?
            if (jsonData.admins.includes(currUser)) marker.push(markatxt);
            // is this user a renamed admin?
            if (jsonData.renadmins.includes(currUser)) marker.push(markrenatxt);
            // is this user a steward?
            if (jsonData.stewards.includes(currUser)) marker.push(markstewtxt);
            // is this user an ombudsman?
            if (jsonData.ombudsman.includes(currUser)) marker.push(markombudsmantxt);
            // is this user a bureaucrat?
            if (jsonData.bureaucrats.includes(currUser)) marker.push(markbureautxt);
          }

          if (markoversight) {
            // does this user have oversight rights?
            if (jsonData.oversight.includes(currUser)) marker.push(markoversighttxt);
          }

          if (markcheckuser) {
            // does this user have checkuser rights?
            if (jsonData.checkuser.includes(currUser)) {
              if (jsonData.admins.includes(currUser)) {
                marker.push(markcheckusertxt);
              } else {
                marker.push(markcheckusertxt + "-" + markatxt);
			  }
            }
          }

          if (markarbcom) {
            // is this user an arbcom member?
              if (jsonData.arbcom.includes(currUser)) {
                if (jsonData.admins.includes(currUser)) {
                  marker.push(markarbcomtxt);
                } else {
                  marker.push(markarbcomtxt + "-" + markatxt);
                } 
              }
          }

          if (markcomadmins) {
            // is this user a commons admin?
            if (jsonData.comadmins.includes(currUser)) marker.push(markcomatxt);
          }

          if (markwdadmins) {
            // is this user a wikidata admin?
            if (jsonData.wdadmins.includes(currUser)) marker.push(markwdatxt);
          }

          if (markexadmins) {
            // was this user an admin?
            if (jsonData.exadmins.includes(currUser)) marker.push(markexatxt);
          }

          // don't mark followups
          if (!followupmark)
            // don't mark certain pages, except link to user main page
            if (mainpageanchor ||
              (marksubpages && (mw.config.get('wgCanonicalSpecialPageName') != "Prefixindex")
                && (mw.config.get('wgCanonicalSpecialPageName') != "Allpages")))
              // check finished, now append node
              if ((marker.length > 0) && !(dontmarkmyself && (currUserClean == mw.config.get('wgUserName')))) {
                var skip = false;
                for (let i = 0; i < aNode.childNodes.length; i++) {
                  if (aNode.childNodes[i].className === "adminMark") {
                    skip = true;
                    break;
                  }
                }
                if (!skip) {
                  var aMark = document.createElement("span");
                  aMark.className = "adminMark";

                  var aMarkText = document.createTextNode("\u00A0(" + marker.join("/") + ")");
                  aMark.appendChild(aMarkText);
                  aNode.appendChild(aMark);
                }
              }
        }
      }
    }
  }

}(mediaWiki, jQuery));

// </nowiki>