MediaWiki:Common.js

From MemoryWhole
Revision as of 21:06, 18 February 2026 by Admin (talk | contribs) (Add dark mode toggle with OS preference detection)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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.
/* ===== DARK MODE TOGGLE ===== */
(function() {
    'use strict';

    function isDarkMode() {
        return localStorage.getItem('mw-dark-mode') === '1' ||
            (localStorage.getItem('mw-dark-mode') === null &&
             window.matchMedia('(prefers-color-scheme: dark)').matches);
    }

    function setDarkMode(on) {
        if (on) {
            document.body.classList.add('mw-dark-mode');
            localStorage.setItem('mw-dark-mode', '1');
        } else {
            document.body.classList.remove('mw-dark-mode');
            localStorage.setItem('mw-dark-mode', '0');
        }
        updateButton();
    }

    function updateButton() {
        var btn = document.getElementById('mw-dark-toggle');
        if (btn) {
            btn.textContent = document.body.classList.contains('mw-dark-mode') ? '☀️ Light' : '🌙 Dark';
        }
    }

    // Apply immediately (before full load) to prevent flash
    if (isDarkMode()) {
        document.body.classList.add('mw-dark-mode');
    }

    // Add toggle button to the personal tools area
    mw.loader.using('mediawiki.util', function() {
        var btn = document.createElement('button');
        btn.id = 'mw-dark-toggle';
        btn.textContent = isDarkMode() ? '☀️ Light' : '🌙 Dark';
        btn.title = 'Toggle dark mode';
        btn.addEventListener('click', function() {
            setDarkMode(!document.body.classList.contains('mw-dark-mode'));
        });

        // Try to place it near the search bar or personal tools
        var target = document.querySelector('.vector-search-box') ||
                     document.querySelector('#p-personal') ||
                     document.querySelector('.mw-header');
        if (target) {
            target.parentNode.insertBefore(btn, target.nextSibling);
        }
    });

    // Listen for OS-level dark mode changes
    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) {
        if (localStorage.getItem('mw-dark-mode') === null) {
            setDarkMode(e.matches);
        }
    });
})();