Benutzer:Wandelndes Lexikon/markJWP.js
Erscheinungsbild
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
// Skript übernommen von [[Benutzer:Xneb20/markCVUnew.js]] und angepasst
/* ******************************
Dieses Script sorgt für eine Kennzeichnung der Jungwikipedianer, ähnlich der, die für Admins bekannt ist. Jungwikipedianer und deren Diskussionseiten werden mit „JWP“ gekennzeichnet (während die Admins ein „A“ bekommen), wenn die Einstellungen so vorgenommen werden, wie hier beschrieben.
Die hier eingebundene Mitgliederliste findet sich unter [[Benutzer:Wandelndes Lexikon/markJWP.js/list]].
Zur Verwendung, binde einfach in Dein Javascript die folgenden beiden Zeilen ein. Ein Beispiel findet sich unter [[Benutzer:Wandelndes Lexikon/common.js]].
// [[Benutzer:Wandelndes Lexikon/markJWP.js]]
mw.loader.load('//de.wikipedia.org/w/index.php?title=Benutzer:Wandelndes Lexikon/markJWP.js&action=raw&ctype=text/javascript');
****************************** */
// <nowiki>
// Function to fetch user list from page or retrieve from cache
if (typeof(markjwpdebugmode) == 'undefined')
markjwpdebugmode = false;
function fetchJWPUserList(callback) {
// Check if user list is stored in local storage and not expired
var cachedJWPUsers = localStorage.getItem('cachedJWPUsers');
var cachedJWPTime = localStorage.getItem('cachedJWPTime');
if (cachedJWPUsers && cachedJWPTime) {
var currentTime = new Date().getTime();
var elapsedTime = currentTime - parseInt(cachedJWPTime);
// Cache expires after 5 days
var cacheDuration = 5 * 24 * 60 * 60 * 1000;
if (elapsedTime < cacheDuration) {
// Use cached user list if it exists and is not empty
var parsedUsers = JSON.parse(cachedJWPUsers);
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
var apiUrl = mw.config.get('wgServer') + '/w/api.php?action=parse&format=json&page=Benutzer:Wandelndes_Lexikon/markJWP.js/list';
if (markjwpdebugmode) {
console.log("Making API request to: ", apiUrl);
}
jQuery.ajax({
url: apiUrl,
dataType: 'json',
type: 'GET',
success: function (data) {
if (markjwpdebugmode) {
console.log("API request successful.");
}
if (data && data.parse && data.parse.links) {
var userList = 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('cachedJWPUsers', JSON.stringify(userList));
localStorage.setItem('cachedJWPTime', new Date().getTime().toString());
callback(userList);
} else {
console.error("Failed to fetch user list from the API.");
callback([]);
}
},
error: function () {
console.error("API request failed.");
callback([]);
}
});
}
function markjwp() {
// Main function to mark JWP users
var wgAction = mw.config.get('wgAction');
var wgNamespaceNumber = mw.config.get('wgNamespaceNumber');
var wgCanonicalNamespace = mw.config.get('wgCanonicalNamespace');
var wgUserName = mw.user.getName();
// Define markjwptxt globally
var markjwptxt = "JWP";
// Variables that should be defined in your monobook
if (typeof(markjwp) == 'undefined')
markjwp = true;
if (!markjwp)
return; //nichts zu tun, schnell weg hier
if (typeof(markjwpsubpages) == 'undefined')
markjwpsubpages = false;
if (typeof(dontmarkmyself) == 'undefined')
dontmarkmyself = false;
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;
// Fetch JWP user list and mark users
fetchJWPUserList(function(cachedJWPUsers) {
if (markjwp) {
if (markjwpdebugmode) {
console.log('Cached JWP Users:', cachedJWPUsers);
}
if (isSpecial || isHistory || isUserpage || isTalk || isProject || isDatei || isHelp || isDiff) {
var i;
var jwpNode;
var allanchors = document.getElementsByTagName("A");
var allanchorsuser = new Array();
var followupmark;
var searchExp = /\/wiki\/Benutzer(in)?([ _]Diskussion)?:(.+)/;
var searchExpTalk = /[ _]Diskussion:/;
var marker;
var mainpageanchor;
mw.util.addCSS('span.jwpMark { font-weight: bold; }');
for (i = 0; i < allanchors.length; i++) {
jwpNode = allanchors[i];
mainpageanchor = true;
talkpageanchor = false;
// if it's a link to a user
if ((href = jwpNode.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;
currUserDecoded = decodeURIComponent(currUser);
marker = new Array();
if (markjwpdebugmode) {
console.log('+++++ NEW ITEM ++++++');
console.log('Current User:', currUser);
console.log('Current User decoded:', currUserDecoded);
console.log('Is in cached JWP Users: ', cachedJWPUsers.indexOf(currUser) !== -1);
console.log('Is current user (', wgUserName, '): ', currUserDecoded == wgUserName, '; dontmarkmyself: ', dontmarkmyself);
}
if (cachedJWPUsers.indexOf(currUser) !== -1) marker.push(markjwptxt);
// don't mark followups
if (!followupmark)
// don't mark certain pages, except link to user main page
if (mainpageanchor ||
(markjwpsubpages && (wgCanonicalSpecialPageName != "Prefixindex") &&
(wgCanonicalSpecialPageName != "Allpages"))) {
// check finished, now append node
if ((marker.length > 0) && !(dontmarkmyself && (currUserDecoded == wgUserName))) {
var jwpMark = document.createElement("span");
jwpMark.className = "jwpMark";
var jwpMarkText = document.createTextNode(" (" + marker.join("/") + ")");
jwpMark.appendChild(jwpMarkText);
jwpNode.appendChild(jwpMark);
}
}
}
}
}
}
});
}
jQuery(document).ready(markjwp);
// </nowiki>
// [[Kategorie:Benutzer:Wandelndes Lexikon|markJWP.js]]