Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
mw.loader.using('mediawiki.util').then(function () {
    function cleanCategoryLinks(root = document) {
        root.querySelectorAll('a[href*="/Category:"]').forEach(function(link) {
            if (link.dataset.cleaned) return; // avoid double-processing
            if (link.textContent.startsWith('Category:')) {
                link.textContent = link.textContent.replace(/^Category:/, '');
                link.dataset.cleaned = true;
            }
        });
    }

    // Initial run
    cleanCategoryLinks();

    // Observe the page for dynamically added content (MinervaNeue does this)
    const observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            mutation.addedNodes.forEach(function(node) {
                if (node.nodeType === Node.ELEMENT_NODE) {
                    cleanCategoryLinks(node);
                }
            });
        });
    });

    observer.observe(document.body, { childList: true, subtree: true });

    // Hide "Category:" in page headers / namespace labels
    const hideNamespace = () => {
        document.querySelectorAll('.minerva-header .ns-category, .mw-page-title-namespace, .page-heading .ns-category')
                .forEach(el => el.style.display = 'none');
    };

    hideNamespace();

    // Also observe for header changes
    const headerObserver = new MutationObserver(hideNamespace);
    const header = document.querySelector('body');
    if (header) headerObserver.observe(header, { childList: true, subtree: true });
});