MediaWiki:Common.js
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
- Opera:按 Ctrl-F5。
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
/* <pre> */
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
(function () { return __awaiter(void 0, void 0, void 0, function () {
function tabs() {
var defaultStyle = {
purple: {
labelColor: " ",
labelBackgroundColor: "#9070c0",
labelBorderColor: "#b090e0 #7050a0 #9070c0 #b090e0",
labelPadding: ".2em .3em .2em .3em",
textBorderColor: "#9070c0",
textBackgroundColor: "#f0edf5",
textPadding: "1em"
},
green: {
labelColor: " ",
labelBackgroundColor: "#75c045",
labelBorderColor: "#90d060 #60b030 #75c045 #90d060",
labelPadding: ".2em .3em .2em .3em",
textBorderColor: "#75c045 #60b030 #60b030 #75c045",
textBackgroundColor: "#f5fffa",
textPadding: "1em"
},
red: {
labelColor: " ",
labelBackgroundColor: "#FF0000",
labelBorderColor: "#FF8888 #CC0000 #FF0000 #FF8888",
labelPadding: ".2em .3em .2em .3em",
textBorderColor: "#FF0000 #CC0000 #CC0000 #FF0000",
textBackgroundColor: "#fffafa",
textPadding: "1em"
},
blue: {
labelColor: " ",
labelBackgroundColor: "#5b8dd6",
labelBorderColor: "#88abde #3379de #5b8dd6 #88abde",
labelPadding: ".2em .3em .2em .3em",
textBackgroundColor: "#f0f8ff",
textBorderColor: "#5b8dd6 #3379de #3379de #5b8dd6",
textPadding: "1em"
},
yellow: {
labelColor: " ",
labelBackgroundColor: "#ffe147",
labelBorderColor: "#ffe977 #ffd813 #ffe147 #ffe977",
labelPadding: ".2em .3em .2em .3em",
textBackgroundColor: "#fffce8",
textBorderColor: "#ffe147 #ffd813 #ffd813 #ffe147",
textPadding: "1em"
},
orange: {
labelColor: " ",
labelBackgroundColor: "#ff9d42",
labelBorderColor: "#ffac5d #ff820e #ff9d42 #ffac5d",
labelPadding: ".2em .3em .2em .3em",
textBackgroundColor: "#ffeedd",
textBorderColor: "#ff9d42 #ff820e #ff820e #ff9d42",
textPadding: "1em"
},
black: {
labelColor: " ",
labelBackgroundColor: "#7f7f7f",
labelBorderColor: "#999999 #4c4c4c #7f7f7f #999999",
labelPadding: ".2em .3em .2em .3em",
textBackgroundColor: "#e5e5e5",
textBorderColor: "#7f7f7f #4c4c4c #4c4c4c #7f7f7f",
textPadding: "1em"
}
};
var sides = {
top: {
className: "tabLabelTop",
labelColorSide: "top",
labelBorderSide: ["left", "right"],
labelColorSideReverse: "bottom",
dividerSizeType: "height"
},
bottom: {
className: "tabLabelBottom",
labelColorSide: "bottom",
labelBorderSide: ["left", "right"],
labelColorSideReverse: "top",
dividerSizeType: "height"
},
left: {
className: "tabLabelLeft",
labelColorSide: "left",
labelBorderSide: ["top", "bottom"],
labelColorSideReverse: "right",
dividerSizeType: "width"
},
right: {
className: "tabLabelRight",
labelColorSide: "right",
labelBorderSide: ["top", "bottom"],
labelColorSideReverse: "left",
dividerSizeType: "width"
}
};
var truthy = ["1", "on", "true", "yes"];
$body.addClass("tab");
function getOwnPropertyNamesLength(obj) {
return Reflect.ownKeys(obj).length;
}
function toLowerFirstCase(str) {
return str.substring(0, 1).toLowerCase() + str.substring(1);
}
function toUpperFirstCase(str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
mw.hook("wikipage.content").add(function (content) {
content.find(".Tabs").each(function () {
var self = $(this);
if (self.children(".TabLabel")[0]) {
return true;
}
var classList = Array.from(this.classList).filter(function (n) { return Reflect.has(defaultStyle, n); });
var data = $.extend({
labelPadding: "2px",
labelBorderColor: "#aaa",
labelColor: "green",
labelBackgroundColor: $("#content").css("background-color") || "rgba(247,251,255,0.8)",
textPadding: "20px 30px",
textBorderColor: "#aaa",
textBackgroundColor: "white",
defaultTab: 1
}, classList[0] ? defaultStyle[classList[0]] || {} : {}, this.dataset || {});
var styleSheet = {
label: {},
text: {}
};
var tabLabel = self.append('<div class="TabLabel"></div>').children(".TabLabel"), tabDivider = self.append('<div class="TabDivider"></div>').children(".TabDivider"), tabContent = self.append('<div class="TabContent"></div>').children(".TabContent"), labelPadding = data.labelPadding, labelColor = data.labelColor, labelSide = Reflect.has(sides, data.labelSide) ? data.labelSide : "top", side = sides[labelSide], labelColorSideReverse = truthy.includes(data.labelColorSideReverse), dividerSize = parseInt(data.dividerSize);
var defaultTab = parseInt(data.defaultTab);
if (labelSide === "top") {
tabLabel.after(tabDivider);
tabDivider.after(tabContent);
}
else if (labelSide === "bottom") {
tabContent.after(tabDivider);
tabDivider.after(tabLabel);
}
if (!isNaN(dividerSize) && dividerSize > 0) {
self.find(".TabDivider")[side.dividerSizeType](dividerSize);
}
var labelColorName = toUpperFirstCase(labelColorSideReverse ? side.labelColorSideReverse : side.labelColorSide);
self.addClass(side.className);
if (labelColorSideReverse) {
self.addClass("reverse");
}
self.children(".Tab").each(function () {
if ($(this).children(".TabLabelText").text().replace(/\s/g, "").length || $(this).children(".TabLabelText").children().length) {
$(this).children(".TabLabelText").appendTo(tabLabel);
$(this).children(".TabContentText").appendTo(self.children(".TabContent"));
}
$(this).remove();
});
if (isNaN(defaultTab) || defaultTab <= 0 || defaultTab > tabLabel.children(".TabLabelText").length) {
defaultTab = 1;
}
tabLabel.children(".TabLabelText").on("click", function () {
var label = $(this);
label.addClass("selected").siblings().removeClass("selected").css({
"border-color": "transparent",
"background-color": "inherit"
});
tabContent.children(".TabContentText").eq(tabLabel.children(".TabLabelText").index(label)).addClass("selected").siblings().removeClass("selected").removeAttr("style");
if (getOwnPropertyNamesLength(styleSheet.label) > 0) {
label.css(styleSheet.label);
}
setTimeout(function () {
$window.triggerHandler("scroll");
}, 1);
}).eq(defaultTab - 1).trigger("click");
if (labelPadding) {
tabLabel.children(".TabLabelText").css("padding", labelPadding);
}
["labelBorderColor", "labelBackgroundColor", "textPadding", "textBorderColor", "textBackgroundColor"].forEach(function (n) {
var target = /^label/.test(n) ? "label" : "text", key = toLowerFirstCase(n.replace(target, ""));
styleSheet[target][key] = data[n];
});
if (labelColor) {
styleSheet.label["border".concat(labelColorName, "Color")] = labelColor;
}
else if (styleSheet.label.borderColor) {
styleSheet.label["border".concat(labelColorName, "Color")] = "green";
}
tabLabel.find(".selected").trigger("click");
if (getOwnPropertyNamesLength(styleSheet.text) > 0) {
tabContent.css(styleSheet.text);
}
if (data.autoWidth === "yes") {
self.addClass("AutoWidth");
}
if (data.float === "left") {
self.addClass("FloatLeft");
}
if (data.float === "right") {
self.addClass("FloatRight");
}
});
});
}
function templateFix($content) {
var target = $();
$content.find(templateStr).each(function (_, ele) {
if (ele.isTemplateFixed === "true") {
return;
}
ele.isTemplateFixed = true;
var subElements = Array.from(ele.querySelectorAll(templateStr));
if (subElements.length > 0) {
target.push(ele);
subElements.forEach(function (subElement) {
subElement.isTemplateFixed = true;
templateClasses.forEach(function (cls) {
if (!isMGPMGUser) {
subElement.classList.remove(cls.substring(1));
}
});
});
console.info("TemplateFix", ele, subElements);
}
});
if (wgNamespaceNumber >= 0 && wgNamespaceNumber % 2 === 0 && target.length > 0) {
if (+mw.user.options.get("gadget-enable-nest-highlight", 0) === 1 || isMGPMGUser && !wgUserGroups.includes("staff")) {
target.css("border", "3px dashed red");
}
if (isMGPMGUser && !wgUserGroups.includes("staff") && +mw.user.options.get("gadget-disable-nest-alert", 0) !== 1) {
oouiDialog.alert("\u672C\u9875\u9762\u542B\u6709\u5D4C\u5957\u4F7F\u7528\uFF08\u6DF7\u7528\uFF09\u4EE5\u4E0B\u6807\u7B7E\u6216\u6A21\u677F\u7684\u5185\u5BB9\uFF08\u5DF2\u7528\u7EA2\u8272\u865A\u7EBF\u8FB9\u6846\u6807\u8BC6\uFF09\uFF0C\u8BF7\u68C0\u67E5\u6E90\u7801\u5E76\u4FEE\u6539\u4E4B\uFF1A<ul><li>\u5220\u9664\u7EBF\uFF1A<code>".concat(oouiDialog.sanitize("<s>"), "</code>\u3001<code>").concat(oouiDialog.sanitize("<del>"), "</code>\uFF1B</li><li>\u9ED1\u5E55\uFF1A<code>{{\u9ED1\u5E55}}</code>\u3001<code>{{Block}}</code>\u3001<code>{{Heimu}}</code>\uFF1B</li><li>\u5F69\u8272\u5E55\uFF1A<code>{{\u5F69\u8272\u5E55}}</code>\uFF1B</li><li>\u80E1\u8BDD\uFF1A<code>{{\u80E1\u8BDD}}</code>\u3001<code>{{jk}}</code>\uFF0C\u5927\u5C0F\u5199\u4E0D\u9650\u3002</li></ul>"), {
title: "萌娘百科提醒您",
size: "medium"
});
}
}
}
function tcc() {
return __awaiter(this, void 0, void 0, function () {
var tcBtn, originText, wpCaptchaWord_1, wpCaptchaId_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
tcBtn = document.getElementById("TencentCaptchaBtn");
if (!(tcBtn && !tcBtn.disabled)) return [3, 4];
originText = tcBtn.innerText;
tcBtn.innerText = "正在加载验证码,请稍候……";
wpCaptchaWord_1 = document.getElementById("wpCaptchaWord");
wpCaptchaId_1 = document.getElementById("wpCaptchaId");
_a.label = 1;
case 1:
if (!(typeof window.TencentCaptcha !== "function")) return [3, 3];
return [4, sleep(100)];
case 2:
_a.sent();
return [3, 1];
case 3:
if (!tcBtn.disabled) {
new window.TencentCaptcha(tcBtn);
tcBtn.innerText = originText;
}
document.getElementById("wpSave").addEventListener("click", function (e) {
if (!tcBtn.disabled && (!wpCaptchaWord_1.value || !wpCaptchaId_1.value)) {
oouiDialog.alert("请点击验证按钮,完成验证后再提交");
e.preventDefault();
e.stopImmediatePropagation();
e.stopPropagation();
}
}, {
capture: true
});
_a.label = 4;
case 4: return [2];
}
});
});
}
function domainChangedAlert() {
$body.before('<div style="background: #3366CC; color: white; text-align: center; padding: .5rem; position: static;" id="domainChangedAlert"><p>萌娘百科已将域名替换为 <code>*.moegirl.org<b><u>.cn</u></b></code>,原有域名可能访问困难,请更换您的书签等的页面地址。</p></div>');
$body.css({
"background-position-y": $("#domainChangedAlert").outerHeight(),
position: "relative"
});
}
function unescapeString(string) {
var str = "".concat(string);
var result = "";
var length = str.length;
var index = 0;
var chr, part;
while (index < length) {
chr = str.charAt(index++);
if (chr === "%") {
if (str.charAt(index) === "u") {
part = str.slice(index + 1, index + 5);
if (hex4.exec(part)) {
result += String.fromCharCode(parseInt(part, 16));
index += 5;
continue;
}
}
else {
part = str.slice(index, index + 2);
if (hex2.exec(part)) {
result += String.fromCharCode(parseInt(part, 16));
index += 2;
continue;
}
}
}
result += chr;
}
return result;
}
function getNamespacePrefixRegex(namespaceNumber) {
return RegExp("^(?:".concat(Object.entries(mw.config.get("wgNamespaceIds")).filter(function (config) { return config[1] === namespaceNumber; }).map(function (config) { return config[0].toLowerCase(); }).join("|"), "):"), "i");
}
function listMarginLeft() {
$(".mw-parser-output ul:not(.margin-left-set), .mw-parser-output ol:not(.margin-left-set), #mw-content-text > pre.prettyprint ul:not(.margin-left-set), #mw-content-text > pre.prettyprint ol:not(.margin-left-set)").each(function (_, ele) {
var $ele = $(ele);
if (/none.+none/i.test($ele.css("list-style")) || $ele.is(".gallery")) {
if ($ele.parent().is("li") && $ele.parent().parent().is("ul, ol")) {
$ele.css("margin-left", "1.2em");
}
else {
$ele.css("margin-left", "0.2em");
}
}
else if ($ele.is("ol")) {
var li = $ele.children("li");
var start = $ele.attr("start");
var max_1 = /^\d+$/.test(start) ? +start : 0;
li.each(function (_, e) {
var value = $(e).attr("value");
if (/^\d+$/.test(value)) {
max_1 = Math.max(max_1, +value);
}
else {
max_1++;
}
});
$ele.attr("data-last-margin-left-max-length", max_1).css("margin-left", "".concat("".concat(max_1).length * 0.5 + 1.2, "em"));
}
else {
$ele.css("margin-left", "1.2em");
}
$ele.addClass("margin-left-set");
});
}
function historyForm() {
var form = $("#mw-history-compare");
form.find('[name="editchangetags"], [name="revisiondelete"]').on("click", function () {
form.attr("method", "post");
setTimeout(function () {
form.removeAttr("method");
}, 16);
});
}
var wgUserGroups, isMGPMGUser, wgNamespaceNumber, wgAction, body, html, $body, $window, sleep, url, forbiddenScroll, templateTags, templateClasses, templateStr, hex2, hex4, substHost, currentHostFlag, reverseProxyhostAlerted, detectedHost, now, needHashChange, originHash, wgCurRevisionId, wgRevisionId, wgPageName, namespacePrefixRegex_1, displayedTitle_1, result, matchTitles;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
wgUserGroups = mw.config.get("wgUserGroups");
isMGPMGUser = wgUserGroups.includes("patroller") || wgUserGroups.includes("sysop");
wgNamespaceNumber = mw.config.get("wgNamespaceNumber");
wgAction = mw.config.get("wgAction");
body = document.body;
html = document.documentElement;
$body = $(body);
$window = $(window);
sleep = function (ms) {
if (ms === void 0) { ms = 1000; }
return new Promise(function (res) { return setTimeout(res, ms); });
};
if (["ViewAvatar", "Listfiles", "ListDuplicatedFiles", "Unusedimages", "Uncategorizedimages", "MediaStatistics", "TimedMediaHandler"].includes(mw.config.get("wgCanonicalSpecialPageName"))) {
url = new mw.Uri();
url.host = url.host.replace(/^[^.]+/g, "commons");
url.path = mw.config.get("wgScript");
url.query.title = "".concat(mw.config.get("wgCanonicalNamespace"), ":").concat(mw.config.get("wgCanonicalSpecialPageName"));
location.replace(url);
}
forbiddenScroll = ["hidden", "clip"];
$window.on("resize", function () {
var innerWidth = window.innerWidth;
var scrollbarWidth;
if (!forbiddenScroll.includes(getComputedStyle(body).overflowY)) {
scrollbarWidth = innerWidth - body.clientWidth;
}
else if (!forbiddenScroll.includes(getComputedStyle(html).overflowY)) {
scrollbarWidth = innerWidth - html.clientWidth;
}
else {
var backup = body.style.overflowY;
body.style.overflowY = "scroll";
scrollbarWidth = innerWidth - body.clientWidth;
body.style.overflowY = backup;
}
$body[scrollbarWidth <= 0 ? "addClass" : "removeClass"]("overlay-scrollbars");
}).trigger("resize");
templateTags = ["s", "del"];
templateClasses = [".heimu", ".colormu", ".just-kidding-text"];
templateStr = __spreadArray(__spreadArray([], __read(templateTags), false), __read(templateClasses), false).join(", ");
hex2 = /^[\da-f]{2}$/i;
hex4 = /^[\da-f]{4}$/i;
return [4, $.ready];
case 1:
_a.sent();
try {
substHost = void 0;
try {
substHost = top.location.host;
}
catch (_b) {
substHost = "";
}
currentHostFlag = !/\.moegirl\.org(?:\.cn)?$/i.test(location.host);
if (top !== window || currentHostFlag) {
reverseProxyhostAlerted = [];
if (localStorage.getItem("reverse proxy alerted") !== null) {
try {
reverseProxyhostAlerted = JSON.parse(localStorage.getItem("reverse proxy alerted"));
if (!$.isPlainObject(reverseProxyhostAlerted)) {
reverseProxyhostAlerted = {};
}
}
catch (e) {
reverseProxyhostAlerted = {};
}
}
detectedHost = currentHostFlag ? location.host : substHost;
now = new Date().getTime();
localStorage.setItem("reverse proxy alerted", JSON.stringify(reverseProxyhostAlerted));
}
}
catch (e) {
console.debug(e);
}
tabs();
mw.hook("wikipage.content").add(templateFix);
if (wgAction === "history") {
historyForm();
}
needHashChange = /[)]$/.test(location.pathname + location.search);
if (needHashChange) {
originHash = location.hash;
location.hash = "%";
location.hash = originHash;
}
$window.on("hashchange.hashchange", function () {
var hash = decodeURIComponent(location.hash.replace(/^#/, ""));
if (hash.length > 0) {
var target = document.getElementById(hash);
if (target) {
var $target_1 = $(target);
var needScroll = true;
var mwCollapsible = $target_1.closest(".mw-collapsible.mw-collapsed");
if (mwCollapsible.length > 0) {
mwCollapsible.find(".mw-collapsible-toggle").first().triggerHandler("click");
}
var tabContentTextUnselected = $target_1.closest(".TabContentText:not(.selected)");
if (tabContentTextUnselected.length > 0) {
tabContentTextUnselected.closest(".Tabs").children(".TabLabel").children().eq(tabContentTextUnselected.index()).trigger("click");
}
if (needScroll) {
setTimeout(function () {
$("html, body").scrollTop($target_1.offset().top - window.innerHeight / 8);
}, 50);
}
}
}
});
$window.triggerHandler("hashchange.hashchange");
setInterval(listMarginLeft, 200);
["copy", "keydown", "scroll", "mousemove"].forEach(function (type) {
document.addEventListener(type, function () {
$(".mailSymbol").replaceWith('<span title="Template:Mail@">@</span>');
}, {
capture: true,
passive: true
});
});
if (![0, 2].includes(mw.config.get("wgNamespaceNumber")) || mw.config.get("wgNamespaceNumber") === 2 && !mw.config.get("wgPageName").includes("/")) {
$("#multiboilerplateform").remove();
}
wgCurRevisionId = mw.config.get("wgCurRevisionId") || -1;
wgRevisionId = mw.config.get("wgRevisionId") || -1;
if (!!wgUserGroups.includes("autoconfirmed")) return [3, 4];
if (!(wgCurRevisionId > 0 && wgRevisionId > 0 && wgCurRevisionId !== wgRevisionId)) return [3, 2];
return [3, 4];
case 2:
if (![2, 3].includes(wgNamespaceNumber)) return [3, 4];
wgPageName = mw.config.get("wgPageName");
namespacePrefixRegex_1 = getNamespacePrefixRegex(wgNamespaceNumber);
displayedTitle_1 = $("#firstHeading, #section_0").first().text().replace(/ /g, "_").replace(namespacePrefixRegex_1, "").trim();
if (!(mw.config.get("wgAction") === "view" && mw.config.get("wgArticleId") > 0 && displayedTitle_1 !== wgPageName.replace(/ /g, "_").replace(namespacePrefixRegex_1, "").trim())) return [3, 4];
return [4, new mw.Api().post({
action: "query",
prop: "info",
inprop: "varianttitles",
titles: wgPageName
})];
case 3:
$window.triggerHandler("resize");
$window.on("load", function () {
$window.triggerHandler("resize");
});
return [2];
}
});
}); })();
/* </pre> */