Zum Inhalt springen

Benutzer:Wandelndes Lexikon/markJWP.js

aus Wikipedia, der freien Enzyklopädie

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]]