User:Fumple/common.js: Difference between revisions
From Inkipedia, the Splatoon wiki
m (Fixed infinite loop) |
m (Temporarly disabled code) |
||
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 |
Revision as of 15:16, 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 checkPage(type, exist) { if (exist == null) { new mw.Api().get({ action: 'parse', page: type, prop: "" }).done(function (data) { checkPage(type, true) }).fail(function (data) { checkPage(type, false) }); } 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>'); checkNextPage(type) } else if (!exist) { $("#p-namespaces ul").append('<li class="new"><span><a href="/w/index.php?title=' + pageEnc(type) + '&action=edit&redlink=1">' + getTypeByValue(type) + '</a></span></li>'); checkNextPage(type) } } function checkNextPage(type) { switch (type) { case pageTypes.globalJS: checkPage(pageTypes.globalCSS); break; case pageTypes.globalCSS: checkPage(pageTypes.skinJS); break; case pageTypes.skinJS: checkPage(pageTypes.skinCSS); break; case pageTypes.skinCSS: if (mw.config.get("wgUserName") != null) { checkPage(pageTypes.userJS); } break; case pageTypes.userJS: if (mw.config.get("wgUserName") != null) { checkPage(pageTypes.userCSS); } break; case pageTypes.userCSS: if (mw.config.get("wgUserName") != null) { checkPage(pageTypes.userSkinJS); } break; case pageTypes.userSkinJS: if (mw.config.get("wgUserName") != null) { checkPage(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 () { checkPage(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 */