User:Fumple/common.js: Difference between revisions

From Inkipedia, the Splatoon wiki
m (Temporarly disabled code)
m (Added my tabs)
Line 52: Line 52:
$(".-context-menu-media-load-tab").click(function (e) { window.open("/wiki/" + e.target.previousSibling.previousSibling.innerHTML) })
$(".-context-menu-media-load-tab").click(function (e) { window.open("/wiki/" + e.target.previousSibling.previousSibling.innerHTML) })


/*
//Page-specific script
//Page-specific script
//Define vars
//Define vars
Line 66: Line 65:
pageTypes.userSkinCSS = 'User:' + mw.config.get("wgUserName") + '/' + mwSkin + '.css/' + mw.config.get("wgPageName");
pageTypes.userSkinCSS = 'User:' + mw.config.get("wgUserName") + '/' + mwSkin + '.css/' + mw.config.get("wgPageName");


function checkPage(type, exist) {
function userCheckPage(type, exist) {
     if (exist == null) {
     if (exist == null) {
         new mw.Api().get({
         new mw.Api().get({
Line 73: Line 72:
             prop: ""
             prop: ""
         }).done(function (data) {
         }).done(function (data) {
             checkPage(type, true)
             userCheckPage(type, true)
         }).fail(function (data) {
         }).fail(function (data) {
             checkPage(type, false)
             userCheckPage(type, false)
         });
         });
     }
     }
     else if (exist) {
     else if (exist) {
        if (getTypeByValue(type).endsWith("JS")) {
            mw.loader.load('/w/index.php?title=' + pageEnc(type) + '&action=raw&ctype=text/javascript');
        }
        else {
            mw.loader.load('/w/index.php?title=' + pageEnc(type) + '&action=raw&ctype=text/css', 'text/css');
        }
         $("#p-namespaces ul").append('<li><span><a href="/w/index.php?title=' + pageEnc(type) + '">' + getTypeByValue(type) + '</a></span></li>');
         $("#p-namespaces ul").append('<li><span><a href="/w/index.php?title=' + pageEnc(type) + '">' + getTypeByValue(type) + '</a></span></li>');
         checkNextPage(type)
         userCheckNextPage(type)
     }
     }
     else if (!exist) {
     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>');
         $("#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>');
         checkNextPage(type)
         userCheckNextPage(type)
     }
     }
}
}


function checkNextPage(type) {
function userCheckNextPage(type) {
     switch (type) {
     switch (type) {
         case pageTypes.globalJS:
         case pageTypes.globalJS:
             checkPage(pageTypes.globalCSS);
             userCheckPage(pageTypes.globalCSS);
             break;
             break;
         case pageTypes.globalCSS:
         case pageTypes.globalCSS:
             checkPage(pageTypes.skinJS);
             userCheckPage(pageTypes.skinJS);
             break;
             break;
         case pageTypes.skinJS:
         case pageTypes.skinJS:
             checkPage(pageTypes.skinCSS);
             userCheckPage(pageTypes.skinCSS);
             break;
             break;
         case pageTypes.skinCSS:
         case pageTypes.skinCSS:
             if (mw.config.get("wgUserName") != null) {
             if (mw.config.get("wgUserName") != null) {
                 checkPage(pageTypes.userJS);
                 userCheckPage(pageTypes.userJS);
             }
             }
             break;
             break;
         case pageTypes.userJS:
         case pageTypes.userJS:
             if (mw.config.get("wgUserName") != null) {
             if (mw.config.get("wgUserName") != null) {
                 checkPage(pageTypes.userCSS);
                 userCheckPage(pageTypes.userCSS);
             }
             }
             break;
             break;
         case pageTypes.userCSS:
         case pageTypes.userCSS:
             if (mw.config.get("wgUserName") != null) {
             if (mw.config.get("wgUserName") != null) {
                 checkPage(pageTypes.userSkinJS);
                 userCheckPage(pageTypes.userSkinJS);
             }
             }
             break;
             break;
         case pageTypes.userSkinJS:
         case pageTypes.userSkinJS:
             if (mw.config.get("wgUserName") != null) {
             if (mw.config.get("wgUserName") != null) {
                 checkPage(pageTypes.userSkinCSS);
                 userCheckPage(pageTypes.userSkinCSS);
             }
             }
             break;
             break;
Line 138: Line 131:
//Check page specific files
//Check page specific files
onApiReady(function () {
onApiReady(function () {
     checkPage(pageTypes.globalJS);
     userCheckPage(pageTypes.globalJS);
});
});



Revision as of 15:23, 23 August 2019

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
*/