MediaWiki:Gadget-darkmode.js

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)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/**
 * RemiliaWiki Dark Mode Toggle
 */
(function() {
    'use strict';
    
    var STORAGE_KEY = 'remiliawiki-darkmode';
    var LINK_ID = 'pt-darkmode';

    function setTheme(dark) {
        document.documentElement.setAttribute('data-theme', dark ? 'dark' : 'light');
        localStorage.setItem(STORAGE_KEY, dark ? '1' : '0');
        var link = document.querySelector('#' + LINK_ID + ' a');
        if (link) {
            link.textContent = dark ? '☼' : '☽';
            link.title = dark ? 'Switch to light mode' : 'Switch to dark mode';
        }
    }

    var saved = localStorage.getItem(STORAGE_KEY);
    var isDark = saved === '1';
    
    if (isDark) {
        document.documentElement.setAttribute('data-theme', 'dark');
    }

    $(function() {
        // Enable transitions only after page is ready
        setTimeout(function() {
            document.body.classList.add('darkmode-transitions');
        }, 100);

        var link = mw.util.addPortletLink(
            'p-personal',
            '#',
            isDark ? '☼' : '☽',
            LINK_ID,
            isDark ? 'Switch to light mode' : 'Switch to dark mode'
        );
        
        if (link) {
            link.addEventListener('click', function(e) {
                e.preventDefault();
                var currentlyDark = document.documentElement.getAttribute('data-theme') === 'dark';
                setTheme(!currentlyDark);
            });
        }
    });
})();