MediaWiki:Mobile.js:修订间差异

imported>=海豚=
无编辑摘要
wth
标签移动版编辑 移动版网页编辑
 
(未显示4个用户的31个中间版本)
第1行: 第1行:
// <pre>
/* 这里的任何JavaScript将只在移动端加载 */
/* 这里的任何JavaScript将只在移动端加载  
(function($, mw) { //使用匿名函数以避免污染顶级变量
* 请尊重萌娘百科版权,以下代码复制需要注明原自萌娘百科,并且附上URL地址http://zh.moegirl.org/MediaWiki:Common.js
     /* capture支持检测 */
* 版权协定:知识共享 署名-非商业性使用-相同方式共享 3.0
     var captureSupported = false;
*/
     try {
(function ($, mw) { //使用匿名函数以避免污染顶级变量
         var options = Object.defineProperty({}, "capture", {
     /* 函数定义体 */
             get: function () {
     //Tabs
                 captureSupported = true;
     function tabs() {
                 return true;
         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",
             },
             },
        };
        $("body").addClass("tab");
        // A Class
        function StyleSheet() {}
        StyleSheet.prototype.getOwnPropertyNamesLength = function getOwnPropertyNamesLength() {
            return Object.getOwnPropertyNames(this).length;
        };
        String.prototype.toLowerFirstCase = function toLowerFirstCase() {
            return this[0].toLowerCase() + this.substring(1);
        };
        $(".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: null,
                    labelBorderColor: null,
                    labelColor: null,
                    labelBackgroundColor: $("#content").css("background-color"),
                    textPadding: null,
                    textBorderColor: null,
                    textBackgroundColor: null,
                    defaultTab: 1,
                }, classList[0] ? defaultStyle[classList[0]] || {} : {}, this.dataset || {}),
                tabLabel = self.append('<div class="TabLabel"></div>').children(".TabLabel"),
                tabContent = self.append('<div class="TabContent"></div>').children(".TabContent"),
                labelPadding = data.labelPadding,
                labelColor = data.labelColor,
                styleSheet = {
                    label: new StyleSheet(),
                    text: new StyleSheet(),
                },
                defaultTab = parseInt(data.defaultTab);
            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 (styleSheet.label.getOwnPropertyNamesLength()) { 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 = n.replace(target, "").toLowerFirstCase();
                styleSheet[target][key] = data[n];
            });
            if (labelColor) {
                styleSheet.label.borderTopColor = labelColor;
            } else if (styleSheet.label.borderColor) {
                styleSheet.label.borderTopColor = "green";
            }
            tabLabel.find(".selected").click();
            if (styleSheet.text.getOwnPropertyNamesLength()) { tabContent.css(styleSheet.text); }
            if (data.autoWidth === "yes") { self.css("display", "inline-block"); }
         });
         });
    }
        window.addEventListener("test", null, options);
/* Mobile Navmenu by GFwiki*/
     } catch (err) { /* */ }
function menuadjust(){var a = $("body").height()+"px";document.getElementById("mw-mf-page-left").style.height = a;};
     /* 函数定义体 */
$(function(){menuadjust();});
$(window).resize(function(){menuadjust()});
var navbar = function(data, textStatus, jqxhr) {
     var navlist = data.parse.text["*"];
$(navlist).insertBefore(".menu > .hlist")
  };
var mfSidebar = function() {
    var purl = "/api.php?action=parse&page=MediaWiki:MFSidebar&format=json";
    $.ajax({
      url: purl,
      success: navbar,
      error: function () {console.error("can\'t load customized navmenu")},
      dataType: "json"
    });
  };
$(function(){mfSidebar();});
     //用户资料页相关
    function isUserProfile() {
        return mw.config.get('wgCanonicalSpecialPageName') === "UserProfile" && mw.config.get('wgArticleId') === "0";
    }
     //页顶提示模板相关
     //页顶提示模板相关
     function commonBoxs() {
     function commonBoxs() {
第169行: 第21行:
         var commonBoxContainer = $('<div id="commonBoxContainer"><div id="commonBoxInfo"></div></div>').prependTo(contentParent),
         var commonBoxContainer = $('<div id="commonBoxContainer"><div id="commonBoxInfo"></div></div>').prependTo(contentParent),
             commonBoxList = $('<div id="commonBoxList"></div>').appendTo('#commonBoxInfo');
             commonBoxList = $('<div id="commonBoxList"></div>').appendTo('#commonBoxInfo');
         commonBoxes.each(function () {
         commonBoxes.each(function() {
             var commonBoxButton = $('<div class="commonBoxButton"></div>').appendTo(commonBoxList),
             var commonBoxButton = $('<div class="commonBoxButton"></div>').appendTo(commonBoxList),
                 commonBox = $(this);
                 commonBox = $(this);
第175行: 第27行:
                 'border-color': commonBox.css('border-left-color'),
                 'border-color': commonBox.css('border-left-color'),
                 'background-image': 'url(' + commonBox.find('tbody > tr > td:first-child img').prop('src') + ')',
                 'background-image': 'url(' + commonBox.find('tbody > tr > td:first-child img').prop('src') + ')',
             }).on('click', function () {
             }).on('click', function() {
                 if (commonBox.is(':visible')[0]) {
                 if (commonBox.is(':visible')[0]) {
                     commonBoxes.hide();
                     commonBoxes.hide();
第189行: 第41行:
         }).appendTo(commonBoxContainer).hide();
         }).appendTo(commonBoxContainer).hide();
     }
     }
     //链接提示
     //uuid
     function antiAbuseListener(textarea, event) {
     function uuidv4() {
         var filters = [
         var result;
            "{{即将删除",
        do {
             "{{即將刪除",
             result = ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function(c) {
            "{{挂删",
                return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16);
            "{{模板:即将删除",
            "{{模板:即將刪除",
            "{{template:即将删除",
            "{{template:即將刪除",
            "[[分类:即将删除的页面",
            "[[分類:即將刪除的頁面",
            "[[category:即将删除的页面",
            "[[category:即將刪除的頁面",
            "{{文件转移到萌娘共享",
            "{{文件轉移到萌娘共享",
            "{{模板:文件转移到萌娘共享",
            "{{模板:文件轉移到萌娘共享",
            "{{template:文件转移到萌娘共享",
            "{{template:文件轉移到萌娘共享",
            "[[分类:需要删除执行员删除的页面",
            "[[分類:需要刪除執行員刪除的頁面",
            "[[category:需要删除执行员删除的页面",
            "[[category:需要刪除執行員刪除的頁面",
        ];
        var text1 = textarea.value;
        text1 = text1.replace(/\<\/?(?:nowiki|noinclude)\>/g, '');
        text1 = text1.replace(/\<(onlyinclude|includeonly)\>.*?\<\/\1\>/g, '');
        var text2 = textarea.value;
        text2 = text2.replace(/\<\/?(?:onlyinclude|includeonly)\>/g, '');
        text2 = text2.replace(/\<(nowiki|noinclude)\>.*?\<\/\1\>/g, '');
        var results = [];
        for (var i = 0, l = filters.length; i < l; i++) {
            var regExp = new RegExp(filters[i].replace(/\[/g, '\\['), "i");
            if (regExp.test(text1) || regExp.test(text2)) results.push(filters[i]);
        }
        if (results.length > 0) {
            var messageDialog = new OO.ui.MessageDialog();
            var windowManager = new OO.ui.WindowManager();
            $("body").append(windowManager.$element);
            windowManager.addWindows([messageDialog]);
            messageDialog.title.$label.html("H萌娘提醒您<br>您的编辑包含禁止内容!");
            messageDialog.message.$label.html("<br>您提交的内容包含以下部分,被禁止提交:<br><br><ul>" + results.map(function (result) {
                return "<li>" + result + "</li>";
            }).join("") + '</ul><br><br>如果您认为您的编辑无误,请在自行保存编辑内容后到<a target="_blank" rel="nofollow noreferrer noopener" class="external text" href="https://www.hmoegirl.com/Talk:讨论版">讨论版</a>提问。');
            windowManager.openWindow(messageDialog, {
                actions: [{
                    action: 'accept',
                    label: '我知道了',
                    flags: 'primary',
                }],
             });
             });
            event.preventDefault();
         } while (document.querySelector('a[data-linkid="' + result + '"]'));
            event.stopImmediatePropagation();
         return result;
            event.stopPropagation();
            return false;
         }
    }
 
    function antiAbuse(textarea, submitButton, form) {
        mw.loader.using(["oojs-ui"]).then(function () {
            var captureSupported = false;
            try {
                var options = Object.defineProperty({}, "capture", {
                    get: function () {
                        captureSupported = true;
                    },
                });
                window.addEventListener("test", null, options);
            } catch (err) { /* */ }
            if (submitButton) {
                submitButton.addEventListener("click", function (e) {
                    antiAbuseListener(textarea, e);
                }, captureSupported ? {
                    capture: true,
                } : undefined);
            }
            if (form) {
                form.addEventListener("submit", function (e) {
                    antiAbuseListener(textarea, e);
                }, captureSupported ? {
                    capture: true,
                } : undefined);
            }
         });
     }
     }
// Mobile Navmenu by GFwiki
function menuadjust(){var a = $("body").height()+"px";document.getElementById("mw-mf-page-left").style.height = a;};
$(function(){menuadjust();});
$(window).resize(function(){menuadjust()});
var navbar = function(data, textStatus, jqxhr) {
    var navlist = data.parse.text["*"];
$(navlist).insertBefore(".menu > .hlist")
  };
var mfSidebar = function() {
    var purl = "/api.php?action=parse&page=MediaWiki:MFSidebar&format=json";
    $.ajax({
      url: purl,
      success: navbar,
      error: function () {console.error("can\'t load customized navmenu")},
      dataType: "json"
    });
  };
        //需要时载入对应的 scripts
        if (mw.config.get("wgAction") === "edit" || mw.config.get("wgAction") === "submit" || mw.config.get("wgCanonicalSpecialPageName") === "Search") { mw.loader.load("/index.php?title=MediaWiki:Common.js/edit.js&action=raw&ctype=text/javascript"); }
$(function(){mfSidebar();});
     /* 函数执行体 */
     /* 函数执行体 */
     $(function () {
     $(function() {
        //tabs
        tabs();
         //页顶提示模板相关
         //页顶提示模板相关
         commonBoxs();
         commonBoxs();
        //用户资料页
        if (isUserProfile()) {
            var cardContainer = $('.card-container'),
                containerImage = cardContainer.find('.card'),
                containerImageFile = containerImage.find('a.image'),
                containerImageCaption = containerImage.find('.caption');
            containerImageCaption.css("padding", "0 8px");
            containerImageFile.before('<div id="#containerImage" class="listThumb list-thumb-placeholder" style="text-align: center;"><img src="http://static.mengniang.org/common/a/a4/Placeholder-upload.png" style="height:32px" /></div>');
        }
         //黑幕
         //黑幕
         $('.heimu a').on("click", function () {
         $('.heimu a').on("click", function() {
             if (!$(this).closest('.heimu').is(':active, :focus')) return false;
             if (!$(this).closest('.heimu').is(':active, :focus')) return false;
         });
         });
         //Template:hide
         //Template:hide
         if ($('.mw-collapsible')[0]) mw.loader.using('jquery.makeCollapsible').then(function () {
         if ($('.mw-collapsible')[0]) mw.loader.using('jquery.makeCollapsible').then(function() {
             //console.debug('jquery.makeCollapsible is loaded.');
             //console.debug('jquery.makeCollapsible is loaded.');
             $('.mw-collapsible').makeCollapsible();
             $('.mw-collapsible').makeCollapsible();
         });
         });
        //链接提示
          // 桌面版页面外链改为移动端域名
        linkConfirm();
            document.body.addEventListener("click", function(e) {
 
                e.path.forEach(function(ele) {
        //防滥用即将删除
                    if (ele instanceof HTMLAnchorElement) {
        if (!mw.config.get('wgUserGroups').includes('sysop') && !mw.config.get('wgUserGroups').includes('patroller')) {
                        var url = new mw.Uri(ele.href);
            setInterval(function () {
                        if (/www\.hmoegirl\.info?$/.test(url.host) && url.query.mobileaction !== "toggle_view_desktop") {
                if ($('#wikitext-editor')[0]) {
                            url.host = mw.config.get("wgServer").replace(/^(?:(?:https?:)?\/\/)?www/, "m");
                    var target = $('#wikitext-editor');
                            ele.href = url;
                    if (target.data('isTrusted') !== true) {
                        }
                        target.data('isTrusted', true);
                        $('.editor-overlay').css('z-index', 3);
                        antiAbuse(target[0], $('.editor-overlay .header .header-action button.continue')[0], undefined);
                     }
                     }
                 }
                 });
             }, 1000);
             }, captureSupported ? {
        }
                capture: true,
            } : true);
     });
     });
})(jQuery, mediaWiki); //立即执行匿名函数并传递原始变量
})(jQuery, mediaWiki); //立即执行匿名函数并传递原始变量
//页顶加入选项控制
if( mw.config.get('wgNamespaceNumber') != 2){
spanobj=document.createElement("span");
srch=document.getElementById("page-actions");
srch.parentElement.insertBefore(spanobj,srch);
spanobj.innerHTML='<a href="#/talk">讨论</a> · <a href="' + mw.config.get('wgScript') + '?' + $.param({ title: mw.config.get('wgPageName'), action: 'info' }) +'">信息</a> · <a href="' + mw.config.get("wgServer") + mw.config.get("wgScriptPath") + '/特殊:链入页面/' + mw.config.get("wgPageName") + '">相关</a>';
}
// </pre>
// </pre>