User:Fumple/common.js

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 = " File not set Open file page Open file page in new tab "; //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(' ' + getTypeByValue(type) + ' '); userCheckNextPage(type) }   else if (!exist) { $("#p-namespaces ul").append(' ' + getTypeByValue(type) + ' '); 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