User:Fumple/common.js

From Inkipedia, the Splatoon wiki
Revision as of 15:23, 23 August 2019 by Fumple (talk | contribs) (Added my tabs)

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.
function resolveID(id) {
    var replaced = id.replaceAll(".26", "&");
    replaced = replaced.replaceAll(".21", "!");
    replaced = replaced.replaceAll(".28", "(");
    replaced = replaced.replaceAll(".29", ")");
    replaced = replaced.replaceAll(".CF.89", "ω");
    replaced = replaced.replaceAll(".7E", "~");
    replaced = replaced.replaceAll(".27", "'");
    replaced = replaced.replaceAll(".40", "@");
    replaced = replaced.replaceAll(".23", "#");
    replaced = replaced.replaceAll(".24", "$");
    replaced = replaced.replaceAll(".25", "%");
    return replaced;
}
String.prototype.replaceAll = function (search, replacement) {
    var target = this;
    return target.split(search).join(replacement);
};
//Had to do a one line string due to MediaWiki JS restrictions
var contextmenu = "<div class='-context-menu-media-load -context-menu' style='display:none;position: absolute;' name='-context-menu'><div class='-context-menu-text -context-menu-media-load-file'>File not set</div><div class='-context-menu-item -context-menu-media-load-open noselect'>Open file page</div><div class='-context-menu-item -context-menu-media-load-tab noselect'>Open file page in new tab</div></div>";
//I know I could avoid some lines but I don't really want to change how it is
var el = document.createElement("div");
el.innerHTML = contextmenu;
document.body.append(el);
$(".load-media").contextmenu(function (e) {
    if (e.target.tagName != "DIV") {
        return;
    }
    $(".-context-menu").css("display", "block")
        .css("top", e.pageY)
        .css("left", e.pageX);
    if (e.target.id == "") {
        $(".-context-menu-media-load-file").text(resolveID(e.target.parentElement.id.split("|")[0]));
    }
    else {
        $(".-context-menu-media-load-file").text(resolveID(e.target.id.split("|")[0]));
    }
    e.preventDefault();
    return false;
});
$(document).click(function (e) {
    var t = $(e.target);
    if (t.hasClass("-context-menu-text") || t.hasClass("-context-menu-item")) {
        return;
    }
    $(".-context-menu").css("display", "none")
})
$(document).contextmenu(function (e) {
    $(".-context-menu").css("display", "none")
})
$(".-context-menu-media-load-open").click(function (e) { window.location = "/wiki/" + e.target.previousSibling.innerHTML })
$(".-context-menu-media-load-tab").click(function (e) { window.open("/wiki/" + e.target.previousSibling.previousSibling.innerHTML) })

//Page-specific script
//Define vars
var mwSkin = mw.config.get("skin")
var pageTypes = {};
pageTypes.globalJS = 'MediaWiki:Common.js/' + mw.config.get("wgPageName");
pageTypes.globalCSS = 'MediaWiki:Common.css/' + mw.config.get("wgPageName");
pageTypes.skinJS = 'MediaWiki:' + mwSkin + '.js/' + mw.config.get("wgPageName");
pageTypes.skinCSS = 'MediaWiki:' + mwSkin + '.css/' + mw.config.get("wgPageName");
pageTypes.userJS = 'User:' + mw.config.get("wgUserName") + '/common.js/' + mw.config.get("wgPageName");
pageTypes.userCSS = 'User:' + mw.config.get("wgUserName") + '/common.css/' + mw.config.get("wgPageName");
pageTypes.userSkinJS = 'User:' + mw.config.get("wgUserName") + '/' + mwSkin + '.js/' + mw.config.get("wgPageName");
pageTypes.userSkinCSS = 'User:' + mw.config.get("wgUserName") + '/' + mwSkin + '.css/' + mw.config.get("wgPageName");

function userCheckPage(type, exist) {
    if (exist == null) {
        new mw.Api().get({
            action: 'parse',
            page: type,
            prop: ""
        }).done(function (data) {
            userCheckPage(type, true)
        }).fail(function (data) {
            userCheckPage(type, false)
        });
    }
    else if (exist) {
        $("#p-namespaces ul").append('<li><span><a href="/w/index.php?title=' + pageEnc(type) + '">' + getTypeByValue(type) + '</a></span></li>');
        userCheckNextPage(type)
    }
    else if (!exist) {
        $("#p-namespaces ul").append('<li class="new"><span><a href="/w/index.php?title=' + pageEnc(type) + '&amp;action=edit&amp;redlink=1">' + getTypeByValue(type) + '</a></span></li>');
        userCheckNextPage(type)
    }
}

function userCheckNextPage(type) {
    switch (type) {
        case pageTypes.globalJS:
            userCheckPage(pageTypes.globalCSS);
            break;
        case pageTypes.globalCSS:
            userCheckPage(pageTypes.skinJS);
            break;
        case pageTypes.skinJS:
            userCheckPage(pageTypes.skinCSS);
            break;
        case pageTypes.skinCSS:
            if (mw.config.get("wgUserName") != null) {
                userCheckPage(pageTypes.userJS);
            }
            break;
        case pageTypes.userJS:
            if (mw.config.get("wgUserName") != null) {
                userCheckPage(pageTypes.userCSS);
            }
            break;
        case pageTypes.userCSS:
            if (mw.config.get("wgUserName") != null) {
                userCheckPage(pageTypes.userSkinJS);
            }
            break;
        case pageTypes.userSkinJS:
            if (mw.config.get("wgUserName") != null) {
                userCheckPage(pageTypes.userSkinCSS);
            }
            break;
    }
}

function pageEnc(string) {
    return encodeURIComponent(string);
}

function getTypeByValue(value) {
    return Object.keys(pageTypes).find(function (key) { return pageTypes[key] === value });
}

//Check page specific files
onApiReady(function () {
    userCheckPage(pageTypes.globalJS);
});

function onApiReady(callback) {
    if (mw.Api != null) {
        setTimeout(callback, 0);
    } else {
        setTimeout(onApiReady.bind(null, callback), 0);
    }
}


/*
Safety checklist:
- XSS - Done
- Only authorized people - Done
*/