MediaWiki:Gadget-site-javascript.js

H萌娘,万物皆可H的百科全书!
Redayano讨论 | 贡献2022年11月23日 (三) 12:50的版本 (已还原Redayano讨论)的编辑至最后由[[User:imported>Irukaza|imported>Irukaza]]修订的版本)
跳到导航 跳到搜索

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

1. 桌面版CSS MediaWiki:Common.css
2. 桌面版JS MediaWiki:Common.js
3. 移动端CSS MediaWiki:Mobile.css
4. 移动端JS MediaWiki:Mobile.js
5. 全局共用CSS MediaWiki:Gadget-site-styles.css
6. 全局共用JS MediaWiki:Gadget-site-javascript.js
7. 管理员CSS MediaWiki:Group-sysop.css
8. 管理员JS MediaWiki:Group-sysop.js
9. 编辑时载入 MediaWiki:Common.js/edit.js
引用api时用mw.loader.using("mw.Api"),引用uri时用mw.loader.using("mediawiki.Uri")
/* 放置于这里的JavaScript将同时应用于桌面端和移动端 */
//最近更改图例说明
if (mw.config.get("wgCanonicalSpecialPageName") === "Recentchanges") {
    var div = document.getElementById('mw-content-text');
    div.innerHTML = div.innerHTML
    .replace(/行\<\/dd>/g,'行\<\/dd>\<dt class\=\"newpage\"\>坏\<\/dt>\<dd class\=\"mw-changeslist-legend-damaging\"\>编辑或存问题,应予复核(\<a href="https:\/\/www.mediawiki.org\/wiki\/Special:MyLanguage\/ORES_review_tool" class="extiw" title="mw:Special:MyLanguage\/ORES review tool\"\>更多信息\<\/a\>)\<\/dd\>\<dt class\=\"newpage"\>\<font color=\"sienna"\>巡\</font>\<\/dt>\<dd class=\"mw-changeslist-legend-damaging\"\>维护组用户权限(\<a href=\"https:\/\/www.hmoegirl.com\/帮助:H萌娘管理部\"\>成员总览\<\/a\>)\<\/dd\>')
    .replace(/\<dt class\=\"mw-plusminus-pos\">(\<em>±123\<\/em>)/g,'\<dt class\=\"mw-plusminus-pos\">(\<em>±123\<\/em>)')
    .replace(/mw-collapsible mw-collapsed mw-enhanced-rc mw-changeslist-line mw-changeslist-edit/g,'\mw-collapsible mw-enhanced-rc mw-changeslist-line mw-changeslist-edit')
    .replace(/mw-collapsible-toggle mw-collapsible-arrow mw-enhancedchanges-arrow mw-enhancedchanges-arrow-space/g,'\mw-collapsible-toggle mw-collapsible-arrow mw-enhancedchanges-arrow mw-enhancedchanges-arrow-space mw-collapsible-toggle-expanded');
}
/* Tabs */
"use strict";
$(function () {
    var defaultStyle = {
        purple: {
            labelColor: " ", //anti check
            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 Object.getOwnPropertyNames(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 () {
        $(".Tabs").each(function () {
            if ($(this).children(".TabLabel")[0]) {
                return true;
            }
            var self = $(this),
                classList = Array.from(this.classList).filter(function (n) {
                    return n in defaultStyle;
                }),
                data = $.extend({
                    labelPadding: "2px",
                    labelBorderColor: "#aaa",
                    labelColor: "green",
                    labelBackgroundColor: $("#content").css("background-color"),
                    textPadding: "20px 30px",
                    textBorderColor: "#aaa",
                    textBackgroundColor: "white",
                    defaultTab: 1,
                }, classList[0] ? defaultStyle[classList[0]] || {} : {}, this.dataset || {}),
                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,
                styleSheet = {
                    label: {},
                    text: {},
                },
                labelSide = data.labelSide in sides ? data.labelSide : "top",
                side = sides[labelSide],
                labelColorSideReverse = truthy.includes(data.labelColorSideReverse),
                dividerSize = parseInt(data.dividerSize),
                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);
                }
            }).eq(defaultTab - 1).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" + labelColorName + "Color"] = labelColor;
            } else if (styleSheet.label.borderColor) {
                styleSheet.label["border" + labelColorName + "Color"] = "green";
            }
            tabLabel.find(".selected").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");
            }

        });
    });
});
//图片地址
mw.loader.using("mediawiki.Uri").then(function () {
    setInterval(function () {
        $(document.querySelectorAll('img[src*="//img.moegirl.org/"]:not(.org-changed), img[src*="//commons.moegirl.org/"]:not(.org-changed)')).each(function (_, ele) {
            try {
                var url = new mw.Uri(ele.src);
                if (["img.moegirl.org", "commons.moegirl.org"].includes(url.host)) {
                    url.host = "hmoegirl.com";
                    ele.src = url;
                }
                ele.classList.add("org-changed");
            } catch (e) { }
        });
    }, 200);
});