User:Fumple/common.js: Difference between revisions

From Inkipedia, the Splatoon wiki
m (Added my tabs)
m (Remove (Page owner) code)
 
(41 intermediate revisions by 2 users not shown)
Line 1: Line 1:
function resolveID(id) {
// ================================================================================
    var replaced = id.replaceAll(".26", "&");
// Page specific JS/CSS
    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
//Check page specific files
//Define vars
mw.loader.using("mediawiki.api", function () {
var mwSkin = mw.config.get("skin")
    var skin = mw.config.get("skin"),
var pageTypes = {};
        page = mw.config.get("wgPageName"),
pageTypes.globalJS = 'MediaWiki:Common.js/' + mw.config.get("wgPageName");
        user = mw.config.get("wgUserName");
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) {
    var pages = [
    if (exist == null) {
        ['MediaWiki:Common.js/' + page + ".js", "globaljs"],
        ['MediaWiki:Common.css/' + page + ".css", "globalcss"],
        ['MediaWiki:' + skin + '.js/' + page + ".js", "skinjs"],
        ['MediaWiki:' + skin + '.css/' + page + ".css", "skincss"]
    ];
    if (user != null) pages.push(
        ['User:' + user + '/common.js/' + page + ".js", "userjs"],
        ['User:' + user + '/common.css/' + page + ".css", "usercss"],
        ['User:' + user + '/' + skin + '.js/' + page + ".js", "userskinjs"],
        ['User:' + user + '/' + skin + '.css/' + page + ".css", "userskincss"]
    );
    pages.forEach(function (el) {
        if (el[1] == "js") {
            if (new URL(window.location).searchParams.get("disable-page-js") != null) return;
            mw.loader.load('/w/index.php?title=' + encodeURIComponent(el[0]) + '&action=raw&ctype=text/javascript');
        }
        else {
            if (new URL(window.location).searchParams.get("disable-page-css") != null) return;
            mw.loader.load('/w/index.php?title=' + encodeURIComponent(el[0]) + '&action=raw&ctype=text/css', 'text/css');
        }
         new mw.Api().get({
         new mw.Api().get({
             action: 'parse',
             action: 'parse',
             page: type,
             page: el[0],
             prop: ""
             prop: ""
         }).done(function (data) {
         }).done(function (data) {
             userCheckPage(type, true)
             $("#p-namespaces ul").append('<li><span><a href="/w/index.php?title=' + encodeURIComponent(el[0]) + '">' + el[1] + '</a></span></li>');
         }).fail(function (data) {
         }).fail(function (data) {
             userCheckPage(type, false)
             $("#p-namespaces ul").append('<li class="new"><span><a href="/w/index.php?title=' + encodeURIComponent(el[0]) + '&amp;action=edit&amp;redlink=1">' + el[1] + '</a></span></li>');
         });
         });
     }
     });
    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
*/

Latest revision as of 21:20, 19 June 2024

// ================================================================================
// Page specific JS/CSS
// ================================================================================

//Check page specific files
mw.loader.using("mediawiki.api", function () {
    var skin = mw.config.get("skin"),
        page = mw.config.get("wgPageName"),
        user = mw.config.get("wgUserName");

    var pages = [
        ['MediaWiki:Common.js/' + page + ".js", "globaljs"],
        ['MediaWiki:Common.css/' + page + ".css", "globalcss"],
        ['MediaWiki:' + skin + '.js/' + page + ".js", "skinjs"],
        ['MediaWiki:' + skin + '.css/' + page + ".css", "skincss"]
    ];
    if (user != null) pages.push(
        ['User:' + user + '/common.js/' + page + ".js", "userjs"],
        ['User:' + user + '/common.css/' + page + ".css", "usercss"],
        ['User:' + user + '/' + skin + '.js/' + page + ".js", "userskinjs"],
        ['User:' + user + '/' + skin + '.css/' + page + ".css", "userskincss"]
    );
    pages.forEach(function (el) {
        if (el[1] == "js") {
            if (new URL(window.location).searchParams.get("disable-page-js") != null) return;
            mw.loader.load('/w/index.php?title=' + encodeURIComponent(el[0]) + '&action=raw&ctype=text/javascript');
        }
        else {
            if (new URL(window.location).searchParams.get("disable-page-css") != null) return;
            mw.loader.load('/w/index.php?title=' + encodeURIComponent(el[0]) + '&action=raw&ctype=text/css', 'text/css');
        }
        new mw.Api().get({
            action: 'parse',
            page: el[0],
            prop: ""
        }).done(function (data) {
            $("#p-namespaces ul").append('<li><span><a href="/w/index.php?title=' + encodeURIComponent(el[0]) + '">' + el[1] + '</a></span></li>');
        }).fail(function (data) {
            $("#p-namespaces ul").append('<li class="new"><span><a href="/w/index.php?title=' + encodeURIComponent(el[0]) + '&amp;action=edit&amp;redlink=1">' + el[1] + '</a></span></li>');
        });
    });
});