MediaWiki:Common.js: Difference between revisions

From JCraft Wiki
Jump to navigation Jump to search
Created page with "Any JavaScript here will be loaded for all users on every page load.: $(document).ready(function() { var homeLink = document.querySelector('#ca-talk a'); if (homeLink) { homeLink.setAttribute('href', '/wiki/Main_Page'); } });"
 
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
/*PLEASE DON'T MESS WITH*/
$(document).ready(function() {
$(function() {
     var homeLink = document.querySelector('#ca-talk a');
     var homeTab = document.querySelector('#ca-talk a');
     if (homeLink) {
     if (homeTab) {
         homeLink.setAttribute('href', '/wiki/Main_Page');
         homeTab.setAttribute('href', 'https://wiki.jcraft-eoe.com/index.php?title=Main_Page');
        // Ensure the link is physically clickable
        homeTab.style.pointerEvents = 'auto';
        homeTab.style.display = 'inline-block';
     }
     }
});
mw.hook('wikipage.content').add(function($content) {
    $content.find('#toc li').has('ul').each(function() {
        var $li = $(this);
        if ($li.children('.fandom-toc-toggle').length === 0) {
            // Insert a purple clickable arrow before the link
            $li.prepend('');
        }
    });
    $content.find('.fandom-toc-toggle').off('click').on('click', function(e) {
        e.preventDefault();
        e.stopPropagation();
        var $toggle = $(this);
        var $sublist = $toggle.siblings('ul');
        $sublist.slideToggle(200, function() {
            if ($sublist.is(':visible')) {
                $toggle.css('transform', 'rotate(0deg)');
            } else {
                $toggle.css('transform', 'rotate(-90deg)');
            }
        });
    });
});
mw.hook('wikipage.content').add(function($content) {
    var glossary = [
        { regex: /\b(BnB|BNB)s?\b/g, url: 'https://glossary.infil.net/?t=Bread%20and%20Butter' },
        { regex: /\b(Hyper\s*Armor)\b/gi, url: 'https://glossary.infil.net/?t=Armor' }
    ];
    var walker = document.createTreeWalker(
        $content.get(0),
        NodeFilter.SHOW_TEXT,
        {
            acceptNode: function(node) {
                var parent = node.parentElement;
                if (!parent) return NodeFilter.FILTER_ACCEPT;
               
                if (parent.closest('a, #toc, .toc, .mw-editsection, pre, code')) {
                    return NodeFilter.FILTER_REJECT;
                }
                return NodeFilter.FILTER_ACCEPT;
            }
        },
        false
    );
    var nodesToProcess = [];
    while (walker.nextNode()) {
        nodesToProcess.push(walker.currentNode);
    }
    nodesToProcess.forEach(function(node) {
        var text = node.nodeValue;
        var newHtml = text;
        var modified = false;
        glossary.forEach(function(item) {
            item.regex.lastIndex = 0;
            if (item.regex.test(newHtml)) {
                newHtml = newHtml.replace(item.regex, '<a href="' + item.url + '" class="external text" target="_blank" rel="noreferrer noopener">$&</a>');
                modified = true;
            }
        });
        if (modified) {
            $(node).replaceWith(newHtml);
        }
    });
});
});

Latest revision as of 19:49, 11 May 2026

/*PLEASE DON'T MESS WITH*/
$(function() {
    var homeTab = document.querySelector('#ca-talk a');
    if (homeTab) {
        homeTab.setAttribute('href', 'https://wiki.jcraft-eoe.com/index.php?title=Main_Page');
        // Ensure the link is physically clickable
        homeTab.style.pointerEvents = 'auto';
        homeTab.style.display = 'inline-block';
    }
});
mw.hook('wikipage.content').add(function($content) {
    $content.find('#toc li').has('ul').each(function() {
        var $li = $(this);
        if ($li.children('.fandom-toc-toggle').length === 0) {
            // Insert a purple clickable arrow before the link
            $li.prepend('');
        }
    });

    $content.find('.fandom-toc-toggle').off('click').on('click', function(e) {
        e.preventDefault();
        e.stopPropagation();
        var $toggle = $(this);
        var $sublist = $toggle.siblings('ul');
        $sublist.slideToggle(200, function() {
            if ($sublist.is(':visible')) {
                $toggle.css('transform', 'rotate(0deg)');
            } else {
                $toggle.css('transform', 'rotate(-90deg)');
            }
        });
    });
});
mw.hook('wikipage.content').add(function($content) {
    var glossary = [
        { regex: /\b(BnB|BNB)s?\b/g, url: 'https://glossary.infil.net/?t=Bread%20and%20Butter' },
        { regex: /\b(Hyper\s*Armor)\b/gi, url: 'https://glossary.infil.net/?t=Armor' }
    ];

    var walker = document.createTreeWalker(
        $content.get(0), 
        NodeFilter.SHOW_TEXT, 
        {
            acceptNode: function(node) {
                var parent = node.parentElement;
                if (!parent) return NodeFilter.FILTER_ACCEPT;
                
                if (parent.closest('a, #toc, .toc, .mw-editsection, pre, code')) {
                    return NodeFilter.FILTER_REJECT;
                }
                return NodeFilter.FILTER_ACCEPT;
            }
        }, 
        false
    );

    var nodesToProcess = [];
    while (walker.nextNode()) {
        nodesToProcess.push(walker.currentNode);
    }

    nodesToProcess.forEach(function(node) {
        var text = node.nodeValue;
        var newHtml = text;
        var modified = false;

        glossary.forEach(function(item) {
            item.regex.lastIndex = 0;
            if (item.regex.test(newHtml)) {
                newHtml = newHtml.replace(item.regex, '<a href="' + item.url + '" class="external text" target="_blank" rel="noreferrer noopener">$&</a>');
                modified = true;
            }
        });

        if (modified) {
            $(node).replaceWith(newHtml);
        }
    });
});