//*********************************************************************** // 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 // //*********************************************************************** // (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)); //