MediaWiki:Common.js: Difference between revisions

From Galaxypedia
No edit summary
No edit summary
Line 62: Line 62:


                 // find the person's name in the node, and surround their name (in the innerhtml) with a span and change the color to purple. Make sure that the name only exists in the text, and not in the html (so we don't change the color of the link)
                 // find the person's name in the node, and surround their name (in the innerhtml) with a span and change the color to purple. Make sure that the name only exists in the text, and not in the html (so we don't change the color of the link)
                 var name = node.innerHTML.match(/^(.*?)\s/)[1];
                 var nodeText = node.textContent;
                var nameIndex = node.innerHTML.indexOf(name);
                var nameLength = name.length;
                var html = node.innerHTML;
                var text = node.textContent;
                var textIndex = text.indexOf(name);
                var textLength = name.length;
                var startTag = '<span style="color:purple">';
                var endTag = '</span>';
                var htmlStart = html.substring(0, nameIndex);
                var htmlEnd = html.substring(nameIndex + nameLength);
                var textStart = text.substring(0, textIndex);
                var textEnd = text.substring(textIndex + textLength);
                var newHtml = htmlStart + startTag + html.substring(nameIndex, nameIndex + nameLength) + endTag + htmlEnd;


                 // replace the node's innerHTML with the new html
                 // Iterate through each user's name
                node.innerHTML = newHtml;
                for (var j = 0; j < users.length; j++) {
                 // this entire section was made by copilot cuz im too lazy to do it myself
                    var userName = users[j];
           
                    // Create a regular expression to match the name in the text
                    var regex = new RegExp('\\b' + userName + '\\b', 'g');
           
                    // Check if the user's name is present in the text
                    if (nodeText.match(regex)) {
                        // Create a new HTML string with the name wrapped in a <span> element
                        var highlightedText = nodeText.replace(regex, '<span style="color: purple;">$&</span>');
           
                        // Update the node's HTML with the highlighted text
                        node.innerHTML = highlightedText;
                    }
                }
                 // this entire section was made by copilot because im too lazy to do it myself
             }
             }



Revision as of 15:21, 5 October 2023

/* Any JavaScript here will be loaded for all users on every page load. */

//Note that while loading content, appending "/wiki" or "/w" before the "/index..." statement may cause 404 errors or mime type mismatch errors (403)

//Import the Navbox.js scripts for the navbox price/name sorting functionality
// mw.loader.load( '/index.php?title=MediaWiki:Navbox.js&action=raw&ctype=text/javascript' );

// Sitenotice
var sitenotice = document.querySelector('#siteNotice .mw-dismissable-notice');
if (!sitenotice) sitenotice = document.querySelector('#siteNotice');
if (sitenotice) {
	sitenotice.classList.add('sitenoticestyling');
}

// Add extra info to infobox's cost header to notify users to take it with a grain of salt
var headers = document.querySelectorAll('.pi-header');

if (headers) {
    headers.forEach(function(header) {
        var paragraph = header.querySelector('p');

        if (paragraph.textContent.includes('Cost')) {
            header.style.textDecoration = 'underline dashed';
            header.style.cursor = "help";
            header.title = "The Cost section is meant to be taken with a grain of salt. Price fluctuates based on the economy, and the stats listed are meant to serve as a rough estimate.\nNote: KetchupBot does not automatically update this section.";
        	console.log("Added styling to Cost header on infobox");
        }
    })
}

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

        api.get( {
            action: "query",
            list: "allusers",
            augroup: "donator",
            aulimit: "max",
            format: "json"
        } ).done( function ( data ) {
            var users = data.query.allusers;

            users = users.map(function(user) {
                return user.name;
            })

            var xpath = users.map(function(user) {
                return "contains(text(), '" + user + "')"
            })

            xpath = '//*[' + xpath.join(' or ') + ']';

            var nodes = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

            // Add a style for donors
            for (var i = 0; i < nodes.snapshotLength; i++) {
                var node = nodes.snapshotItem(i);

                // find the person's name in the node, and surround their name (in the innerhtml) with a span and change the color to purple. Make sure that the name only exists in the text, and not in the html (so we don't change the color of the link)
                var nodeText = node.textContent;

                // Iterate through each user's name
                for (var j = 0; j < users.length; j++) {
                    var userName = users[j];
            
                    // Create a regular expression to match the name in the text
                    var regex = new RegExp('\\b' + userName + '\\b', 'g');
            
                    // Check if the user's name is present in the text
                    if (nodeText.match(regex)) {
                        // Create a new HTML string with the name wrapped in a <span> element
                        var highlightedText = nodeText.replace(regex, '<span style="color: purple;">$&</span>');
            
                        // Update the node's HTML with the highlighted text
                        node.innerHTML = highlightedText;
                    }
                }
                // this entire section was made by copilot because im too lazy to do it myself
            }

        } );
    })
} );