MediaWiki:Common.js: Difference between revisions

trying a different approach
No edit summary
(trying a different approach)
Line 30: Line 30:


// Experimental donator user group checker
// Experimental donator user group checker
$(document).ready(function(){
$$(document).ready(function(){
     mw.loader.using('mediawiki.api', function() {
     mw.loader.using('mediawiki.api', function() {
         var api = new mw.Api();
         var api = new mw.Api();
Line 36: Line 36:
         console.log("Searching for donators")
         console.log("Searching for donators")


         // Get all user links on the page. Filter out non-user links (e.g. "talk" links)
         api.get( {
        var userelements = Array.from(document.getElementsByTagName("a")).filter(function (el) {
            action: "query",
             return el.href.includes("User:");
            list: "allusers",
        });
             augroup: "donator",
       
            aulimit: "max",
        console.log("Userelements: " + userelements.join(", "))
             format: "json"
 
        } ).done( function ( data ) {
        if (userelements.length != 0) {
            var users = data.query.allusers;
             var users = userelements.map(function (el) {
                var match = el.href.match(/(?<=\/wiki\/User:).*/gi);
                if (match) {
                    return match[0];
                } else {
                    return null;
                }
            }).filter(function (el) {
                return el != null;
            });
           
            console.log("Users: " + users.join(", "));


             api.get( {
             users = users.map(function(user) {
                action: "query",
                 return user.name;
                list: "users",
            })
                usprop: "groups",
                ususers: users.join("|"),
                format: "json"
            } ).done( function ( data ) {
                 var userdata = data.query.users;


                for (var i = 0; i < userdata.length; i++) {
            var xpath = users.map(function(user) {
                    if (userdata[i].groups.includes("donator")) {
                return "//*contains(text(), '" + user + "')"
                        console.log(userdata[i].name + " is a donator");
            })
                    } else {
                    console.log(userdata[i].name + " is not a donator")
                    }
                }


                // Add a style to the user links to indicate donator status
            xpath = xpath.join(" or ")
                userelements.forEach(function (el) {
                    var match = el.href.match(/(?<=\/wiki\/User:).*/gi);


                    if (match) {
            var nodes = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null);
                        var user = match[0];
                        var userindex = users.indexOf(user);


                        if (userindex != -1) {
            var node = nodes.iterateNext();
                            if (userdata[userindex].groups.includes("donator")) {
                                el.style.color = "purple";
                            }
                        }
                    }
                });


             } );
             // Add a style for donors
         }
            while (node) {
     } );
                node.style.color = "purple";
});
                node = nodes.iterateNext();
            }
         } );
     })
} );