MediaWiki:Common.js: Difference between revisions

From MB Wiki
Jump to navigation Jump to search
(the format varies per action so just make it easier to customize)
m (fix title set.)
 
(24 intermediate revisions by 2 users not shown)
Line 1: Line 1:
var config = mw.config.values;
/* ============================================
  THEME TOGGLER
  ============================================ */


// Load site JS
// 1. INSTANT EXECUTION (PREVENTS FLASH OF WRONG THEME)
[
// This runs the millisecond the script loads, before the body renders.
'BetterUpload.js', // Improvements to Special:Upload
(function() {
'BetterDiff.js' // Aids with patrolling and with diff viewing on RC, page history and user contribs
    var savedTheme = localStorage.getItem('mb-wiki-theme');
]
    if (savedTheme === 'break') {
.forEach(function(scr){
        document.documentElement.classList.add('theme-break');
importScript('MediaWiki:'+scr);
    }
})();
 
// 2. DOM READY EXECUTION (UI BINDING)
$(function() {
    var isBreak = document.documentElement.classList.contains('theme-break');
   
    var $btn = $('<button>', {
        id: 'theme-toggle',
        class: 'floating-theme-toggle',
        text: isBreak ? '✦ Switch to Mana' : '✦ Switch to Break',
        title: 'Toggle Light/Dark Theme'
    });
   
    $('body').append($btn);
 
    $btn.on('click', function() {
        var $html = $('html');
       
        if ($html.hasClass('theme-break')) {
            // Switching to Mana (Light)
            $html.removeClass('theme-break');
            localStorage.setItem('mb-wiki-theme', 'mana');
            $(this).text('✦ Switch to Break');
        } else {
            // Switching to Break (Dark)
            $html.addClass('theme-break');
            localStorage.setItem('mb-wiki-theme', 'break');
            $(this).text('✦ Switch to Mana');
        }
    });
});
});
/* ============================================
  TITTLE FIX
  ============================================ */
(function() {
    // Only on main page
    if (mw.config.get('wgPageName') !== 'Main_Page' &&
        !window.location.href.includes('Main_Page')) return;
   
    console.log('=== APPLYING EMERGENCY TITLE FIX ===');
   
    // 1. IMMEDIATELY set the title
    document.title = 'MB Wiki - The Official Wiki';
   
    // 2. Override the heading
    function fixHeading() {
        var heading = document.querySelector('#firstHeading, h1.firstHeading, .mw-page-title-main');
        if (heading) {
            heading.textContent = 'MB Wiki - The Official Wiki';
            heading.style.display = 'none';
            heading.style.visibility = 'hidden';
        } else {
            // Create heading if it doesn't exist
            var newHeading = document.createElement('h1');
            newHeading.id = 'firstHeading';
            newHeading.className = 'firstHeading';
            newHeading.textContent = 'MB Wiki - The Official Wiki';
            var content = document.querySelector('#content, .mw-body');
            if (content) content.prepend(newHeading);
        }
    }
   
    // 3. Run now and keep running
    fixHeading();
    setTimeout(fixHeading, 100);
    setTimeout(fixHeading, 500);
    setTimeout(fixHeading, 1000);
    setTimeout(fixHeading, 2000);
   
    // 4. Monitor and fix any time title changes
    var lastTitle = document.title;
    setInterval(function() {
        if (document.title !== lastTitle &&
            document.title.includes('Coral Island')) {
            console.log('Title changed to wrong value, fixing...');
            document.title = 'MB Wiki - The Official Wiki';
            lastTitle = document.title;
            fixHeading();
        }
    }, 500);
   
    // 5. Also fix meta tags
    function fixMetaTags() {
        var metaTags = document.querySelectorAll('meta[property="og:title"], meta[name="twitter:title"]');
        metaTags.forEach(function(tag) {
            tag.setAttribute('content', 'MB Wiki - The Official Wiki');
        });
    }
    fixMetaTags();
   
    console.log('Emergency title fix applied');
})();/* ============================================
  THEME TOGGLER
  ============================================ */


// Add navigational keybinds
// 1. INSTANT EXECUTION (PREVENTS FLASH OF WRONG THEME)
mw.hook('wikipage.content').add(function(){
// This runs the millisecond the script loads, before the body renders.
var actions = {
(function() {
e: function(page){ return config.wgServer+mw.util.getUrl(page)+'?action=edit'; },
    var savedTheme = localStorage.getItem('mb-wiki-theme');
h: function(page){ return config.wgServer+mw.util.getUrl(page)+'?action=history'; },
    if (savedTheme === 'break') {
m: function(page){ return config.wgServer+mw.util.getUrl('Special:MovePage/'+page); },
        document.documentElement.classList.add('theme-break');
d: function(page){ return config.wgServer+mw.util.getUrl(page)+'?action=delete'; },
    }
};
})();
if (config.wgAction=='view') {
 
var url = new URL(document.location.href);
// 2. DOM READY EXECUTION (UI BINDING)
var title =
$(function() {
url.searchParams.get('title') || // for `/w/index.php?title=XYZ` links
    var isBreak = document.documentElement.classList.contains('theme-break');
url.pathname.replace(/^.*?wi?k?i?\//, ''); // for `/wiki/XYZ` links
   
$(document).on('keydown', function(e) {
    var $btn = $('<button>', {
var key = e.key.toLocaleLowerCase();
        id: 'theme-toggle',
if (
        class: 'floating-theme-toggle',
actions[key] &&
        text: isBreak ? '✦ Switch to Mana' : '✦ Switch to Break',
!(e.target && ['INPUT', 'TEXTAREA'].includes(e.target.nodeName)) &&
        title: 'Toggle Light/Dark Theme'
config.wgCanonicalSpecialPageName===false
    });
) {
   
document.location.href= actions[key](title);
    $('body').append($btn);
}
 
});
    $btn.on('click', function() {
}
        var $html = $('html');
       
        if ($html.hasClass('theme-break')) {
            // Switching to Mana (Light)
            $html.removeClass('theme-break');
            localStorage.setItem('mb-wiki-theme', 'mana');
            $(this).text('✦ Switch to Break');
        } else {
            // Switching to Break (Dark)
            $html.addClass('theme-break');
            localStorage.setItem('mb-wiki-theme', 'break');
            $(this).text('✦ Switch to Mana');
        }
    });
});
});
 
/* ============================================
// Load personal JS & CSS if logged in user
  TITTLE FIX
if (config.wgUserName && config.wgUserName.length>0) {
  ============================================ */
importScript('User:'+config.wgUserName+'/common.js');
(function() {
importStylesheet('User:'+config.wgUserName+'/common.css');
    // Only on main page
}
    if (mw.config.get('wgPageName') !== 'Main_Page' &&  
        !window.location.href.includes('Main_Page')) return;
   
    console.log('=== APPLYING EMERGENCY TITLE FIX ===');
   
    // 1. IMMEDIATELY set the title
    document.title = 'MB Wiki - The Official Wiki';
   
    // 2. Override the heading
    function fixHeading() {
        var heading = document.querySelector('#firstHeading, h1.firstHeading, .mw-page-title-main');
        if (heading) {
            heading.textContent = 'MB Wiki - The Official Wiki';
            heading.style.display = 'none';
            heading.style.visibility = 'hidden';
        } else {
            // Create heading if it doesn't exist
            var newHeading = document.createElement('h1');
            newHeading.id = 'firstHeading';
            newHeading.className = 'firstHeading';
            newHeading.textContent = 'MB Wiki - The Official Wiki';
            var content = document.querySelector('#content, .mw-body');
            if (content) content.prepend(newHeading);
        }
    }
   
    // 3. Run now and keep running
    fixHeading();
    setTimeout(fixHeading, 100);
    setTimeout(fixHeading, 500);
    setTimeout(fixHeading, 1000);
    setTimeout(fixHeading, 2000);
   
    // 4. Monitor and fix any time title changes
    var lastTitle = document.title;
    setInterval(function() {
        if (document.title !== lastTitle &&
            document.title.includes('Coral Island')) {
            console.log('Title changed to wrong value, fixing...');
            document.title = 'MB Wiki - The Official Wiki';
            lastTitle = document.title;
            fixHeading();
        }
    }, 500);
   
    // 5. Also fix meta tags
    function fixMetaTags() {
        var metaTags = document.querySelectorAll('meta[property="og:title"], meta[name="twitter:title"]');
        metaTags.forEach(function(tag) {
            tag.setAttribute('content', 'MB Wiki - The Official Wiki');
        });
    }
    fixMetaTags();
   
    console.log('Emergency title fix applied');
})();

Latest revision as of 04:08, 19 May 2026

/* ============================================
   THEME TOGGLER
   ============================================ */

// 1. INSTANT EXECUTION (PREVENTS FLASH OF WRONG THEME)
// This runs the millisecond the script loads, before the body renders.
(function() {
    var savedTheme = localStorage.getItem('mb-wiki-theme');
    if (savedTheme === 'break') {
        document.documentElement.classList.add('theme-break');
    }
})();

// 2. DOM READY EXECUTION (UI BINDING)
$(function() {
    var isBreak = document.documentElement.classList.contains('theme-break');
    
    var $btn = $('<button>', {
        id: 'theme-toggle',
        class: 'floating-theme-toggle',
        text: isBreak ? '✦ Switch to Mana' : '✦ Switch to Break',
        title: 'Toggle Light/Dark Theme'
    });
    
    $('body').append($btn);

    $btn.on('click', function() {
        var $html = $('html');
        
        if ($html.hasClass('theme-break')) {
            // Switching to Mana (Light)
            $html.removeClass('theme-break');
            localStorage.setItem('mb-wiki-theme', 'mana');
            $(this).text('✦ Switch to Break');
        } else {
            // Switching to Break (Dark)
            $html.addClass('theme-break');
            localStorage.setItem('mb-wiki-theme', 'break');
            $(this).text('✦ Switch to Mana');
        }
    });
});
/* ============================================
   TITTLE FIX
   ============================================ */
(function() {
    // Only on main page
    if (mw.config.get('wgPageName') !== 'Main_Page' && 
        !window.location.href.includes('Main_Page')) return;
    
    console.log('=== APPLYING EMERGENCY TITLE FIX ===');
    
    // 1. IMMEDIATELY set the title
    document.title = 'MB Wiki - The Official Wiki';
    
    // 2. Override the heading
    function fixHeading() {
        var heading = document.querySelector('#firstHeading, h1.firstHeading, .mw-page-title-main');
        if (heading) {
            heading.textContent = 'MB Wiki - The Official Wiki';
            heading.style.display = 'none';
            heading.style.visibility = 'hidden';
        } else {
            // Create heading if it doesn't exist
            var newHeading = document.createElement('h1');
            newHeading.id = 'firstHeading';
            newHeading.className = 'firstHeading';
            newHeading.textContent = 'MB Wiki - The Official Wiki';
            var content = document.querySelector('#content, .mw-body');
            if (content) content.prepend(newHeading);
        }
    }
    
    // 3. Run now and keep running
    fixHeading();
    setTimeout(fixHeading, 100);
    setTimeout(fixHeading, 500);
    setTimeout(fixHeading, 1000);
    setTimeout(fixHeading, 2000);
    
    // 4. Monitor and fix any time title changes
    var lastTitle = document.title;
    setInterval(function() {
        if (document.title !== lastTitle && 
            document.title.includes('Coral Island')) {
            console.log('Title changed to wrong value, fixing...');
            document.title = 'MB Wiki - The Official Wiki';
            lastTitle = document.title;
            fixHeading();
        }
    }, 500);
    
    // 5. Also fix meta tags
    function fixMetaTags() {
        var metaTags = document.querySelectorAll('meta[property="og:title"], meta[name="twitter:title"]');
        metaTags.forEach(function(tag) {
            tag.setAttribute('content', 'MB Wiki - The Official Wiki');
        });
    }
    fixMetaTags();
    
    console.log('Emergency title fix applied');
})();/* ============================================
   THEME TOGGLER
   ============================================ */

// 1. INSTANT EXECUTION (PREVENTS FLASH OF WRONG THEME)
// This runs the millisecond the script loads, before the body renders.
(function() {
    var savedTheme = localStorage.getItem('mb-wiki-theme');
    if (savedTheme === 'break') {
        document.documentElement.classList.add('theme-break');
    }
})();

// 2. DOM READY EXECUTION (UI BINDING)
$(function() {
    var isBreak = document.documentElement.classList.contains('theme-break');
    
    var $btn = $('<button>', {
        id: 'theme-toggle',
        class: 'floating-theme-toggle',
        text: isBreak ? '✦ Switch to Mana' : '✦ Switch to Break',
        title: 'Toggle Light/Dark Theme'
    });
    
    $('body').append($btn);

    $btn.on('click', function() {
        var $html = $('html');
        
        if ($html.hasClass('theme-break')) {
            // Switching to Mana (Light)
            $html.removeClass('theme-break');
            localStorage.setItem('mb-wiki-theme', 'mana');
            $(this).text('✦ Switch to Break');
        } else {
            // Switching to Break (Dark)
            $html.addClass('theme-break');
            localStorage.setItem('mb-wiki-theme', 'break');
            $(this).text('✦ Switch to Mana');
        }
    });
});
/* ============================================
   TITTLE FIX
   ============================================ */
(function() {
    // Only on main page
    if (mw.config.get('wgPageName') !== 'Main_Page' && 
        !window.location.href.includes('Main_Page')) return;
    
    console.log('=== APPLYING EMERGENCY TITLE FIX ===');
    
    // 1. IMMEDIATELY set the title
    document.title = 'MB Wiki - The Official Wiki';
    
    // 2. Override the heading
    function fixHeading() {
        var heading = document.querySelector('#firstHeading, h1.firstHeading, .mw-page-title-main');
        if (heading) {
            heading.textContent = 'MB Wiki - The Official Wiki';
            heading.style.display = 'none';
            heading.style.visibility = 'hidden';
        } else {
            // Create heading if it doesn't exist
            var newHeading = document.createElement('h1');
            newHeading.id = 'firstHeading';
            newHeading.className = 'firstHeading';
            newHeading.textContent = 'MB Wiki - The Official Wiki';
            var content = document.querySelector('#content, .mw-body');
            if (content) content.prepend(newHeading);
        }
    }
    
    // 3. Run now and keep running
    fixHeading();
    setTimeout(fixHeading, 100);
    setTimeout(fixHeading, 500);
    setTimeout(fixHeading, 1000);
    setTimeout(fixHeading, 2000);
    
    // 4. Monitor and fix any time title changes
    var lastTitle = document.title;
    setInterval(function() {
        if (document.title !== lastTitle && 
            document.title.includes('Coral Island')) {
            console.log('Title changed to wrong value, fixing...');
            document.title = 'MB Wiki - The Official Wiki';
            lastTitle = document.title;
            fixHeading();
        }
    }, 500);
    
    // 5. Also fix meta tags
    function fixMetaTags() {
        var metaTags = document.querySelectorAll('meta[property="og:title"], meta[name="twitter:title"]');
        metaTags.forEach(function(tag) {
            tag.setAttribute('content', 'MB Wiki - The Official Wiki');
        });
    }
    fixMetaTags();
    
    console.log('Emergency title fix applied');
})();