MediaWiki:Common.js

From SCA Lochac
Jump to navigation Jump to search

Note: After saving, 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: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
/* Any JavaScript here will be loaded for all users on every page load. */

var ruleBooks = [
    {
        namespace: "Armoured_Combat",
        label: "Armoured combat rules",
        banner: "http://seneschal.sca.org.au/files/2017/12/warfield1.jpg",
        logo: "https://sca.org.nz/wiki/images/f/f4/Fightershandbookcover-al.svg",
        webVersion:
            "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Handbook",
        pdfVersion:
            "https://sca.org.nz/wiki/index.php?title=Category:Fighters_Handbook&action=pandocpdfbook&titlePage=Armoured_Combat:Fighters_Handbook_Titlepage&template=Armoured_Combat:Fighters_Handbook_Template",
        chapters: [
            ["Classes of Participant and combat",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Classes_of_Participant_and_Combat"],
            ["Combat Authorisation Requirements",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Combat_Authorisation_Requirements"],
            ["Rules of the Lists",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Rules_of_the_Lists"],
            ["Conventions of Combat",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Conventions_of_Combat"],
            ["The Use of Weapons and Shields",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:The_Use_of_Weapons_and_Shields"],
            ["Target Areas and Acknowledgement of Blows",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Target_Areas_and_Acknowledgement_of_Blows"],
            ["Armour Requirements",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Armour_Requirements"],
            ["Melee Weapon Standards",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Melee_Weapon_Standards"],
            ["Throwing Weapon Standards",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Throwing_Weapon_Standards"],
            ["Missile Weapon Standards",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Missile_Weapon_Standards"],
            ["Grievances and Sanctions",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Grievances_and_Sanctions"],
            ["Procedures for Changes to These Rules",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Procedures_for_Changes_to_These_Rules"],
            ["Glossary",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Glossary"],
            ["Change log",
                "https://sca.org.nz/wiki/index.php?title=Armoured_Combat:Change_Log"]
        ]
    },
    {
        namespace: "Archery",
        logo: "https://sca.org.nz/wiki/images/0/05/ArcheryHandbookCover.svg",
        banner: "https://archers.lochac.sca.org/files/2015/09/cropped-combat-archers-2-1000x287.jpg",
        label: "Target Archery / Thrown Weapon Rules",
        webVersion: "https://sca.org.nz/wiki/index.php?title=Archery:Handbook",
        pdfVersion:
            "https://sca.org.nz/wiki/index.php?title=Category:Target_Archery_Rulebook&action=pdfbook&titlePage=Archery:Titlepage",
        chapters: [
            ["Basic Rules",
                "https://sca.org.nz/wiki/index.php?title=Archery:Basic_Rules"],
            ["Equipment standards",
                "https://sca.org.nz/wiki/index.php?title=Archery:Equipment_standards"],
            ["Range safety",
                "https://sca.org.nz/wiki/index.php?title=Archery:Range_safety"],
            ["Officers",
                "https://sca.org.nz/wiki/index.php?title=Archery:Officers"],
            ["Authorising as a Target Archery Marshal",
                "https://sca.org.nz/wiki/index.php?title=Archery:Authorising"]
        ]
    }
];

function showToolBox() {
    var toolBox = document.getElementById("p-tb");
    toolBox.style.visibility = "visible";
}

var defaultBanner = "http://webcentre.co.nz/kk/vickiimgs/stanIldSCA.jpg";
var defaultLogo = "https://sca.org.nz/wiki/images/f/fb/Lochaclarge.png";

function setBannerImage(nameSpace) {
    var namespaceObj = ruleBooks.find(function (obj) { return 'namespace' in obj && obj.namespace === nameSpace });

    var banner;
    var logo;

    if (namespaceObj === undefined) {
        banner = defaultBanner;
        logo = defaultLogo;
    } else {
        banner = namespaceObj ? namespaceObj : defaultBanner;
        logo = namespaceObj.logo ? namespaceObj : defaultLogo;

        document.getElementById("mw-head-base").style.backgroundImage = "url(\"" + banner + "\")";
        document.getElementsByClassName("mw-wiki-logo")[0].style.backgroundImage = "url(\"" + logo + "\")";
    }
}

function buildSideMenu() {
    currentNamespace = mw.config.get("wgCanonicalNamespace");
    var navigationMenu = document.getElementById("mw-panel");

    for (var ruleBook in ruleBooks) {
        var bookObj = ruleBooks[ruleBook];

        var bookDiv = document.createElement("div");
        bookDiv.setAttribute("class", "portal");
        navigationMenu.insertBefore(bookDiv, document.getElementById("p-tb"));

        var title = document.createElement("h3");
        //title.setAttribute("class", "portal");
        //title.setAttribute("role", "navigation");
        if ("webVersion" in bookObj) {
            var titleLink = document.createElement("a");
            titleLink.setAttribute("href", bookObj.webVersion);
            titleLink.appendChild(document.createTextNode(bookObj.label));
            title.appendChild(titleLink);
        } else {
            title.appendChild(document.createTextNode(bookObj.label));
        }
        bookDiv.appendChild(title);

        var navBody = document.createElement("div");
        navBody.setAttribute("class", "body");
        bookDiv.appendChild(navBody);

        var entries = document.createElement("ul");
        navBody.appendChild(entries);

        if (
            bookObj.namespace === mw.config.get("wgCanonicalNamespace") &&
            "chapters" in bookObj
        ) {
            var chapterCount = bookObj.chapters.length;
            for (var i = 0; i < chapterCount; i++) {
                chapter = bookObj.chapters[i];
                var chapterLink = document.createElement("a");
                var chapterNumber = i + 1;
                var chapterTitle = chapterNumber + ". " + chapter[0];
                chapterLink.appendChild(document.createTextNode(chapterTitle));
                chapterLink.setAttribute("href", chapter[1]);
                var li = document.createElement("li");
                li.appendChild(chapterLink);
                entries.appendChild(li);
            }
        }

        if ("pdfVersion" in bookObj) {
            var pdfLink = document.createElement("a");
            pdfLink.appendChild(document.createTextNode("PDF version"));
            pdfLink.setAttribute("href", bookObj.pdfVersion);
            var h3 = document.createElement("h3");
            h3.appendChild(pdfLink);
            bookDiv.appendChild(h3);
        }
    }
}
function markAsDraft() {
    var topDiv = document.getElementById("top");
    var h1 = document.createElement("h1");
    h1.style.fontsize = "xx-large";
    h1.style.color = "red";

    h1.appendChild(document.createTextNode("This page is a draft only"));
    topDiv.appendChild(h1);

}

function ModifyPage() {
    var isLoggedIn;

    try {
        isLoggedIn = mw.config.get("wgUserId");
        if (isLoggedIn === null) {
            isLoggedIn = false;
        } else {
            isLoggedIn = true;
        }
    } catch (ReferenceError) {
        isLoggedIn = false;
    }

    var isDraft;
    var nameSpace = mw.config.get("wgCanonicalNamespace");

    try {
        if (nameSpace.toLowerCase().search("draft") === -1) {
            isDraft = false;
        } else {
            isDraft = true;
        }
    } catch (Exception) {
        isDraft = false;
    }

    if (isLoggedIn) {
        showToolBox();
    }
    buildSideMenu();

    if (isDraft) {
        markAsDraft();
    }
    setBannerImage(nameSpace);
}

jQuery(ModifyPage);