2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

MediaWiki:Moeskin.js

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox/Safari:按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
  • Google Chrome:按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
  • Internet Explorer:按住“Ctrl”的同时单击“刷新”,或按“Ctrl-F5”
  • Opera:在“工具→首选项”中清除缓存
如果您已登录但该页面出现未登录状态,请尝试在地址栏的地址最后添加代码?_=1来访问最新页面。
添加代码后的本页地址如下:-{R|https://moegirl.icu/MediaWiki:Moeskin.js?_=1}-
引用api时用mw.loader.using(["mediawiki.api"]),引用uri时用mw.loader.using(["mediawiki.Uri"])
萌娘百科界面管理员团队提醒您
大萌字-InterfaceAdmin.png
本页面由萌娘百科界面管理员团队在其 GitHub 库内进行维护,通过机器人自动生成可被 MediaWiki Gadget 扩展接受的版本并保存到此处。 如果您有任何意见或建议,建议您到技术实现版提出。
/**
 * -------------------------------------------------------------------------
 * !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
 * -------------------------------------------------------------------------
 */
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/global/zh/MediaWiki:Moeskin.js|user=[[U:屠麟傲血]]|co-authors=|longId=cab43dc7b58ebbd1ef0565300732ecb11ec353de|shortId=cab43dc7|summary=fix: add space after ✌//✌ and  semicolon after const, delete an unless blank line}}'; 

/* <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 };
    }
};
(function () { return __awaiter(void 0, void 0, void 0, function () {
    function fixImage() {
        return __awaiter(this, void 0, void 0, function () {
            var getImageInfo_1;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0: return [4, mw.loader.using("mediawiki.Title")];
                    case 1:
                        _a.sent();
                        mw.Title.newFromImg = function (img) {
                            var matches, i, regex;
                            var thumbPhpRegex = /thumb\.php/, regexes = [
                                /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s/]+)\/[^\s/]+-[^\s/]*$/,
                                /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s/]+)$/,
                                /\/([^\s/]+)\/[^\s/]+-(?:\1|thumbnail)[^\s/]*$/,
                                /\/([^\s/]+)$/,
                            ], recount = regexes.length, src = img.jquery ? img[0].src || img[0].dataset.lazySrc : img.src || img.dataset.lazySrc;
                            matches = src.match(thumbPhpRegex);
                            if (matches) {
                                return mw.Title.newFromText("File:".concat(mw.util.getParamValue("f", src)));
                            }
                            var decodedSrc = decodeURIComponent(src);
                            for (i = 0; i < recount; i++) {
                                regex = regexes[i];
                                matches = decodedSrc.match(regex);
                                if (matches && matches[1]) {
                                    return mw.Title.newFromText("File:".concat(matches[1]));
                                }
                            }
                            return null;
                        };
                        if (["loading", "loaded", "executing", "ready", "error"].includes(mw.loader.getState("mediawiki.page.gallery.slideshow"))) {
                            getImageInfo_1 = mw.GallerySlideshow.prototype.getImageInfo;
                            mw.GallerySlideshow.prototype.getImageInfo = function ($img) {
                                if ($img.attr("src") === undefined) {
                                    $img.attr("src", $img.data("lazy-src"));
                                }
                                return getImageInfo_1.bind(this)($img);
                            };
                            $("li.gallerycarousel").remove();
                            mw.util.$content.find(".mw-gallery-slideshow").each(function () {
                                new mw.GallerySlideshow(this);
                            });
                        }
                        if (!(mw.config.get("wgMediaViewerOnClick") && ["loading", "loaded", "executing", "ready"].includes(mw.loader.getState("mmv.bootstrap.autostart")))) return [3, 3];
                        return [4, mw.loader.using("mmv.bootstrap.autostart")];
                    case 2:
                        _a.sent();
                        $.proxy(mw.mmv.bootstrap, "processThumbs")(mw.util.$content);
                        _a.label = 3;
                    case 3: return [2];
                }
            });
        });
    }
    var fixWikiLove, useCustomSidenavBlock, addPortletLink, applyPageTools, externalLinkConfirm, noteTAIcon;
    return __generator(this, function (_a) {
        switch (_a.label) {
            case 0:
                fixWikiLove = function () { return __awaiter(void 0, void 0, void 0, function () {
                    var $wikiLoveBtn;
                    return __generator(this, function (_a) {
                        switch (_a.label) {
                            case 0:
                                $wikiLoveBtn = $("#moe-page-tools a#ca-wikilove");
                                if (!$wikiLoveBtn.length) {
                                    return [2];
                                }
                                return [4, mw.loader.using(["ext.wikiLove.local"])];
                            case 1:
                                _a.sent();
                                $wikiLoveBtn.on("click", function (e) {
                                    e.preventDefault();
                                    $.wikiLove.openDialog();
                                });
                                return [2];
                        }
                    });
                }); };
                useCustomSidenavBlock = function () {
                    var $block = $("aside#moe-global-siderail #moe-custom-sidenav-block");
                    if (!$block.length) {
                        $block = $("<div>", {
                            "class": "moe-card",
                            id: "moe-custom-sidenav-block"
                        });
                        $block.append($("<div>", {
                            "class": "mw-parser-output"
                        }).append($("<h2>", { text: "自定义工具" }), $("<ul>", { id: "moe-custom-sidenav-block-list" })));
                        $("aside#moe-global-siderail .moe-siderail-sticky").before($block);
                    }
                    return $block;
                };
                addPortletLink = function (portletId, href, text, id, tooltip, accesskey, nextnode) {
                    var $block = useCustomSidenavBlock();
                    var $li = $("<li>", {
                        id: id,
                        "data-portletId": portletId,
                        "data-nextnode": nextnode
                    }).append($("<a>", {
                        text: text,
                        href: href,
                        title: tooltip,
                        accesskey: accesskey
                    }));
                    $block.find("#moe-custom-sidenav-block-list").append($li);
                    return $li.get(0);
                };
                try {
                    Object.defineProperties(window, {
                        addPortletLink: {
                            value: addPortletLink,
                            configurable: true
                        },
                        useCustomSidenavBlock: {
                            value: useCustomSidenavBlock,
                            configurable: true
                        }
                    });
                }
                catch (e) {
                    console.warn("[MoeSkin] addPortletLink", "Faild to bind global variables", e);
                }
                return [4, mw.loader.using(["mediawiki.util"])];
            case 1:
                _a.sent();
                Reflect.defineProperty(mw.util, "addPortletLink", {
                    value: addPortletLink,
                    configurable: true
                });
                mw.hook("moeskin.addPortletLink").fire({ addPortletLink: addPortletLink, useCustomSidenavBlock: useCustomSidenavBlock });
                applyPageTools = function () {
                    var usePageTools = function () { return $("main > #moe-article > #moe-page-tools-container > #moe-page-tools"); };
                    var usePageToolsButton = function () { return usePageTools().find(".content-actions > a:first-of-type").clone().removeAttr("id href").removeClass("selected").find(".tooltip, .xicon").empty().end(); };
                    var addPageToolsButton = function (icon, tooltip, type) {
                        if (type === void 0) { type = "action"; }
                        var $pageTools = usePageTools();
                        var $button = usePageToolsButton();
                        $button.find("> .xicon").append(icon || "?");
                        $button.find("> .tooltip").text(tooltip);
                        switch (type) {
                            case "extra":
                                $($pageTools.find(".tools-extra")).prepend($button);
                                break;
                            case "action":
                            default:
                                $($pageTools.find(".content-actions #ca-more-actions")).before($button);
                                break;
                        }
                        return $button;
                    };
                    mw.hook("moeskin.pagetools").fire({
                        usePageTools: usePageTools,
                        usePageToolsButton: usePageToolsButton,
                        addPageToolsButton: addPageToolsButton
                    });
                };
                externalLinkConfirm = function () { return __awaiter(void 0, void 0, void 0, function () {
                    var getConfirmMessage;
                    var _a;
                    return __generator(this, function (_b) {
                        switch (_b.label) {
                            case 0: return [4, mw.loader.using(["ext.gadget.site-lib", "oojs-ui-windows", "oojs-ui-core"])];
                            case 1:
                                _b.sent();
                                getConfirmMessage = function (url) {
                                    var $wrapper = $("<div>", { style: "text-align: center" });
                                    $wrapper.append($("<div>", { text: wgULS("您点击了一个外部链接:", "您點選了一個外部連結:") }));
                                    $wrapper.append($("<strong>", { text: url.href }));
                                    $wrapper.append($("<div>", { text: wgULS("此网页不属于萌娘百科,我们不保证其安全性,请谨慎选择是否继续访问。", "此網頁不屬於萌娘百科,我們不保證其安全性,請謹慎選擇是否繼續訪問。") }));
                                    return $wrapper;
                                };
                                (_a = document.getElementById("mw-content-text")) === null || _a === void 0 ? void 0 : _a.addEventListener("click", function (e) { return __awaiter(void 0, void 0, void 0, function () {
                                    var anchor, hrefText, hrefURL, response;
                                    return __generator(this, function (_a) {
                                        switch (_a.label) {
                                            case 0:
                                                if (e.target.tagName !== "A") {
                                                    return [2];
                                                }
                                                anchor = e.target;
                                                hrefText = anchor.getAttribute("href");
                                                if (!hrefText || hrefText.startsWith("#") || hrefText.startsWith("javascript:") || anchor.classList.contains("image")) {
                                                    return [2];
                                                }
                                                hrefURL = new URL(anchor.href);
                                                if (hrefURL.host.endsWith("moegirl.org.cn") || hrefURL.host.endsWith("moegirl.org")) {
                                                    return [2];
                                                }
                                                e.preventDefault();
                                                return [4, OO.ui.confirm(getConfirmMessage(hrefURL))];
                                            case 1:
                                                response = _a.sent();
                                                response && window.open(hrefURL.href);
                                                return [2];
                                        }
                                    });
                                }); });
                                return [2];
                        }
                    });
                }); };
                noteTAIcon = function () {
                    var noteTAbutton = $('<button tabindex="0" type="button"/>')
                        .append('<span style="padding:1px 3px;">汉漢</span>');
                    var noteTAicon = $("<span/>").attr({
                        id: "p-noteTA-moeskin",
                        role: "navigation",
                        "class": "noteTA-button",
                        title: "本页使用了标题或全文手工转换"
                    }).append(noteTAbutton);
                    $("#p-languages-group").append(noteTAicon);
                };
                return [4, $.ready];
            case 2:
                _a.sent();
                fixWikiLove();
                fixImage();
                applyPageTools();
                if (Reflect.has(document, "ontouchstart") && !location.host.startsWith("mobile")) {
                    externalLinkConfirm();
                }
                if ($(".noteTA")[0]) {
                    noteTAIcon();
                }
                return [2];
        }
    });
}); })(); 

/* </pre> */