Benutzer:Xneb20/markCVUnew.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
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//*********************************************************************** // MARK CVU PROJECT MEMBERS //*********************************************************************** // siehe [[Benutzer:Xneb20/markCVUnew]] //*********************************************************************** // markCVUnew.js: // Skript von [[Benutzer:Xneb20]], unter Verwendung des Originalskripts (siehe unten) // Einbau und Verwendung: folgende Zeile kopieren: // mw.loader.load('//de.wikipedia.org/w/index.php?title=Benutzer:Xneb20/markCVUnew.js&action=raw&ctype=text/javascript'); //*********************************************************************** //*********************************************************************** // Credits Orginalskript: // markAdmins.js: // 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]] // markMentors.js: // umgebaut: [[Benutzer:Anka Friedrich]] // BugFix: [[Benutzer:DerHexer]] //*********************************************************************** // <nowiki> // Function to fetch user list from page or retrieve from cache if(typeof(markcvudebugmode)=='undefined') markcvudebugmode=false; functionfetchCVUUserList(callback){ // Check if user list is stored in local storage and not expired varcachedCVUUsers=localStorage.getItem('cachedCVUUsers'); varcachedCVUTime=localStorage.getItem('cachedCVUTime'); if(cachedCVUUsers&&cachedCVUTime){ varcurrentTime=newDate().getTime(); varelapsedTime=currentTime-parseInt(cachedCVUTime); // Cache expires after 5 days varcacheDuration=5*24*60*60*1000; if(elapsedTime<cacheDuration){ // Use cached user list if it exists and is not empty varparsedUsers=JSON.parse(cachedCVUUsers); if(Array.isArray(parsedUsers)&&parsedUsers.length>0){ //console.log("Using cached user list."); callback(parsedUsers); return; } } } // If cache is expired or not available, fetch from page varapiUrl=mw.config.get('wgServer')+'/w/api.php?action=parse&format=json&page=Wikipedia:WikiProjekt_Vandalismusbekämpfung/Ansprechpartner'; if(markcvudebugmode){ console.log("Making API request to: ",apiUrl); } jQuery.ajax({ url:apiUrl, dataType:'json', type:'GET', success:function(data){ if(markcvudebugmode){ console.log("API request successful."); } if(data&&data.parse&&data.parse.links){ varuserList=data.parse.links .filter(link=>(link.ns===2&&link['*'].startsWith("Benutzer"))) .map(link=>encodeURIComponent(link['*'].replace(/Benutzer(in)?:/,"").replace(/ /g,"_"))); // Cache the user list localStorage.setItem('cachedCVUUsers',JSON.stringify(userList)); localStorage.setItem('cachedCVUTime',newDate().getTime().toString()); callback(userList); }else{ console.error("Failed to fetch user list from the API."); callback([]); } }, error:function(){ console.error("API request failed."); callback([]); } }); } functionmarkcvu(){ // Main function to mark CVU users varwgAction=mw.config.get('wgAction'); varwgNamespaceNumber=mw.config.get('wgNamespaceNumber'); varwgCanonicalNamespace=mw.config.get('wgCanonicalNamespace'); varwgUserName=mw.user.getName(); // Define markmtxt globally varmarkmtxt="CVU"; // Variables that should be defined in your monobook if(typeof(markcvu)=='undefined') markcvu=true; if(!markcvu) return;//nichts zu tun, schnell weg hier if(typeof(markmsubpages)=='undefined') markmsubpages=false; if(typeof(dontmarkmyself)=='undefined') dontmarkmyself=true; if(typeof(isSpecial)=='undefined') isSpecial=(wgCanonicalNamespace=="Special"); if(typeof(isHistory)=='undefined') isHistory=(wgAction=='history'); if(typeof(isUserpage)=='undefined') isUserpage=((wgCanonicalNamespace=="User")||(wgCanonicalNamespace=="User_talk")); if(typeof(isTalk)=='undefined') isTalk=(wgNamespaceNumber%2==1); if(typeof(isProject)=='undefined') isProject=(wgCanonicalNamespace=="Project"); if(typeof(isDatei)=='undefined') isDatei=(wgCanonicalNamespace=="File"); if(typeof(isHelp)=='undefined') isHelp=(wgCanonicalNamespace=="Help"); if(typeof(isDiff)=='undefined') isDiff=mw.util.getParamValue('diff')!==null;//Danke an [[Benutzer:TMg]] // Fetch CVU user list and mark users fetchCVUUserList(function(cachedCVUUsers){ if(markcvu){ if(markcvudebugmode){ console.log('Cached CVU Users:',cachedCVUUsers); } if(isSpecial||isHistory||isUserpage||isTalk||isProject||isDatei||isHelp||isDiff){ vari; varmNode; varallanchors=document.getElementsByTagName("A"); varallanchorsuser=newArray(); varfollowupmark; varsearchExp=/\/wiki\/Benutzer(in)?([ _]Diskussion)?:(.+)/; varsearchExpTalk=/[ _]Diskussion:/; varmarker; varmainpageanchor; mw.util.addCSS('span.cvuMark { font-weight: bold; }'); for(i=0;i<allanchors.length;i++){ mNode=allanchors[i]; mainpageanchor=true; talkpageanchor=false; // if it's a link to a user if((href=mNode.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; elseallanchorsuser[i]=""; followupmark=false; if(i>0) if((currUserClean==allanchorsuser[i-1])&&talkpageanchor) followupmark=true; currUser=currUserClean; currUserDecoded=decodeURIComponent(currUser); marker=newArray(); if(markcvudebugmode){ console.log('+++++ NEW ITEM ++++++'); console.log('Current User:',currUser); console.log('Current User decoded:',currUserDecoded); console.log('Is in cached CVU Users: ',cachedCVUUsers.indexOf(currUser)!==-1); console.log('Is current user (',wgUserName,'): ',currUserDecoded==wgUserName,'; dontmarkmyself: ',dontmarkmyself); } if(cachedCVUUsers.indexOf(currUser)!==-1)marker.push(markmtxt); // don't mark followups if(!followupmark) // don't mark certain pages, except link to user main page if(mainpageanchor|| (markmsubpages&&(wgCanonicalSpecialPageName!="Prefixindex")&& (wgCanonicalSpecialPageName!="Allpages"))){ // check finished, now append node if((marker.length>0)&&!(dontmarkmyself&&(currUserDecoded==wgUserName))){ varmMark=document.createElement("span"); mMark.className="cvuMark"; varmMarkText=document.createTextNode(" ("+marker.join("/")+")"); mMark.appendChild(mMarkText); mNode.appendChild(mMark); } } } } } } }); } jQuery(document).ready(markcvu); // </nowiki>