MediaWiki:Common.js

From Anvil Empires Wiki
Jump to navigation Jump to search

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.
/* Any JavaScript here will be loaded for all users on every page load. */

/* TimeZoneCoverter script credits: Michael Schönitzer (WMDE)

Original url: https://meta.wikimedia.org/wiki/User:Michael_Sch%C3%B6nitzer_(WMDE)/timezoneconverter.js*/

function numberToSigndString(num) {
    if (num <= -10) {
        return String(num);
    } else if (num < 0) {
        return "-0" + String(-num);
    } else if (num < 10) {
        return "+0" + String(num);
    } else {
        return "+" + String(num);
    }
}

mw.hook("wikipage.content").add(function($content) {
    /* Check if TZC is used by the page */
    var page = $content[0];
    var activator = page.querySelector('#tzc-timezoneconverter');
    if (activator === null) {
        return;
    }

    /* get timezone and locale */
    var timezonename = Intl.DateTimeFormat().resolvedOptions().timeZone;
    var timezoneoffset = numberToSigndString(-new Date().getTimezoneOffset() / 60);
    var locale = Intl.DateTimeFormat().resolvedOptions().locale;

    /* Display timezone and locale */
    if (activator.querySelector('#tzc-enabled') !== null) {
        activator.querySelector('#tzc-enabled').style.display = "";
    }
    if (activator.querySelector('#tzc-disabled') !== null) {
        activator.querySelector('#tzc-disabled').style.display = "none";
    }

    /* Show timezone and local, both in activator-element as well as outside */
    page.querySelectorAll('.tzc-timezonename').forEach(function(element) {
        element.innerText = timezonename;
    });
    page.querySelectorAll('.tzc-timezoneoffset').forEach(function(element) {
        element.innerText = timezoneoffset;
    });
    page.querySelectorAll('.tzc-locale').forEach(function(element) {
        element.innerText = locale;
    });

    var converter = function(event) {
        var timestamp;
        if (event.dataset.datetime !== undefined) {
            timestamp = event.dataset.datetime;
        } else if (event.dateTime !== undefined) {
            timestamp = event.dateTime;
        } else {
            return;
        }
        var date = new Date(Date.parse(timestamp));
        var localdate;
        if (event.classList.contains("tzc-timeonly")) {
            localdate = date.toLocaleTimeString();
        } else if (event.classList.contains("tzc-dateonly")) {
            localdate = date.toLocaleDateString();
        } else if (event.classList.contains("tzc-fulldate")) {
            localdate = date.toLocaleDateString([], {
                dateStyle: "full",
                weekday: "long"
            });
        } else if (event.classList.contains("tzc-daytime")) {
            localdate = date.toLocaleTimeString([], {
                weekday: "long"
            });
        } else if (event.classList.contains("tzc-dtime")) {
            localdate = date.toLocaleTimeString([], {
                weekday: "short"
            });
        } else if (event.classList.contains("tzc-houronly")) {
            localdate = date.toLocaleTimeString([], {
                hour: "numeric"
            });
        } else {
            localdate = date.toLocaleString();
        }
        /* remove seconds if zero */
        if (localdate.slice(-3) === ":00") {
            localdate = localdate.slice(0, -3);
        }
        event.innerText = localdate;
        event.title = date.toLocaleString([], {
            "timeZoneName": 'short'
        });
    };

    /* Search and convert dates */
    page.querySelectorAll('.tzc-event').forEach(converter);
    page.querySelectorAll('time').forEach(converter);
});

importScript("MediaWiki:DiscordCompact.js");