Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Common.js: Difference between revisions

MediaWiki interface page
No edit summary
No edit summary
Line 9: Line 9:


$(function() {
$(function() {
     function switchTab(from) {
    // Handle redirects with tab switching
    var $redirect = $('span.mw-redirectedfrom a');
    if ($redirect.length) {
        waitAndSwitchTab($redirect.text().trim());
    }
 
    // Handle hash-based tab switching
    if (window.location.hash && window.location.hash.indexOf('tabber-tabpanel') !== -1) {
        waitAndSwitchTab(null, window.location.hash.substring(1));
    }
 
    // Intercept search result clicks
    document.addEventListener('click', function(e) {
        var link = e.target.closest('a');
        if (!link) return;
        var href = link.getAttribute('href');
        if (!href) return;
 
        // Check if this is a redirect page link
        var title = link.textContent.trim();
        var pageTitle = href.replace(/^\//, '').replace(/_/g, ' ');
 
        // If the link text doesn't match where it's going, it's probably a resolved redirect
        if (title !== pageTitle && link.closest('.citizen-typeahead')) {
            e.preventDefault();
            // Navigate using the redirect so our observer can catch it
            window.location.href = '/index.php?title=' + encodeURIComponent(title) + '&redirect=yes';
        }
    }, true);
 
     function waitAndSwitchTab(from, panelId) {
         var observer = new MutationObserver(function(mutations, obs) {
         var observer = new MutationObserver(function(mutations, obs) {
             var panels = document.querySelectorAll('[role="tabpanel"]');
             var panels = document.querySelectorAll('[role="tabpanel"]');
             if (panels.length > 0) {
             if (panels.length > 0) {
                 panels.forEach(function(panel) {
                 if (panelId) {
                    if (panel.textContent.indexOf(from) !== -1) {
                    var tab = document.querySelector('[aria-controls="' + panelId + '"]');
                        var panelId = panel.getAttribute('id');
                    if (tab) tab.click();
                        var tab = document.querySelector('[aria-controls="' + panelId + '"]');
                } else if (from) {
                        if (tab) {
                    panels.forEach(function(panel) {
                            tab.click();
                        if (panel.textContent.indexOf(from) !== -1) {
                            var id = panel.getAttribute('id');
                            var tab = document.querySelector('[aria-controls="' + id + '"]');
                            if (tab) tab.click();
                         }
                         }
                     }
                     });
                 });
                 }
                 obs.disconnect();
                 obs.disconnect();
             }
             }
         });
         });
         observer.observe(document.body, { childList: true, subtree: true });
         observer.observe(document.body, { childList: true, subtree: true });
    }
    // Check for redirect notice
    var $redirect = $('span.mw-redirectedfrom a');
    if ($redirect.length) {
        switchTab($redirect.text().trim());
        return;
    }
    // Check URL for redirect parameter
    var redirectFrom = mw.util.getParamValue('redirect');
    if (redirectFrom === 'no') {
        return;
    }
    // Check if we came from a different title than the current page
    var fromTitle = mw.util.getParamValue('title');
    if (fromTitle && fromTitle !== mw.config.get('wgPageName')) {
        switchTab(fromTitle.replace(/_/g, ' '));
     }
     }
});
});

Revision as of 21:39, 3 April 2026

/* Any JavaScript here will be loaded for all users on every page load. */
$(function() {
    $('[accesskey="t"]').removeAttr('accesskey');
    $('[accesskey="n"]').removeAttr('accesskey');
    $('#pt-mytalk').remove();
    $('#ca-talk').remove();
    $('#ca-addsection').remove();
});

$(function() {
    // Handle redirects with tab switching
    var $redirect = $('span.mw-redirectedfrom a');
    if ($redirect.length) {
        waitAndSwitchTab($redirect.text().trim());
    }

    // Handle hash-based tab switching
    if (window.location.hash && window.location.hash.indexOf('tabber-tabpanel') !== -1) {
        waitAndSwitchTab(null, window.location.hash.substring(1));
    }

    // Intercept search result clicks
    document.addEventListener('click', function(e) {
        var link = e.target.closest('a');
        if (!link) return;
        var href = link.getAttribute('href');
        if (!href) return;

        // Check if this is a redirect page link
        var title = link.textContent.trim();
        var pageTitle = href.replace(/^\//, '').replace(/_/g, ' ');

        // If the link text doesn't match where it's going, it's probably a resolved redirect
        if (title !== pageTitle && link.closest('.citizen-typeahead')) {
            e.preventDefault();
            // Navigate using the redirect so our observer can catch it
            window.location.href = '/index.php?title=' + encodeURIComponent(title) + '&redirect=yes';
        }
    }, true);

    function waitAndSwitchTab(from, panelId) {
        var observer = new MutationObserver(function(mutations, obs) {
            var panels = document.querySelectorAll('[role="tabpanel"]');
            if (panels.length > 0) {
                if (panelId) {
                    var tab = document.querySelector('[aria-controls="' + panelId + '"]');
                    if (tab) tab.click();
                } else if (from) {
                    panels.forEach(function(panel) {
                        if (panel.textContent.indexOf(from) !== -1) {
                            var id = panel.getAttribute('id');
                            var tab = document.querySelector('[aria-controls="' + id + '"]');
                            if (tab) tab.click();
                        }
                    });
                }
                obs.disconnect();
            }
        });
        observer.observe(document.body, { childList: true, subtree: true });
    }
});