Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//<nowiki>
mw.loader.load('//fr.wikipedia.org/w/index.php?title=Utilisateur:Ltrlg/scripts/TemplateDataEditor.js&action=raw&ctype=text/javascript');
// install [[User:Cacycle/wikEd]] in-browser text editor
( function () { var script = document.createElement( 'script' ); script.src = '//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&action=raw&ctype=text/javascript'; script.async = true; document.getElementsByTagName( 'head' )[ 0 ].appendChild( script ); } ) ();

{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
/* 这里的任何JavaScript将在全站加载
 * 请尊重萌娘百科版权,以下代码复制需要注明原自萌娘百科,并且附上URL地址http://zh.moegirl.org/MediaWiki:Common.js
 * 版权协定:知识共享 署名-非商业性使用-相同方式共享 3.0
 
 *  loader模块 写法参见 https://www.mediawiki.org/wiki/ResourceLoader/Modules#mw.loader.load
 */
(function($, mw) { //使用匿名函数防止污染顶级变量
    /* 函数定义体 */
    //滚动公告
    function AutoScroll(obj) {
        $(obj).slideDown().find("ul:first").animate({
            marginTop: "-25px"
        }, 500, function() {
            $(this).css({
                marginTop: "0px"
            }).find("li:first").appendTo(this);
        });
    }
    //Extension:MultimediaViewer的半透明化修改,用于保持背景文字处于原位,本应修改插件达成的,暂时先用JavaScript应急处理下
    function multimediaViewer() {
        $('a.image img[srcset][data-file-width][data-file-height], .mw-mmv-filepage-buttons a.mw-mmv-view-expanded').on('click', function() {
            if ($(this).closest('.TabLabelText')[0] || $(this).closest('a').closest('.mw-customtoggle')[0]) return;
            var scrollTop = document.body.scrollTop;
            $('html, body').add(document).on('scroll.multimediaViewer', function() {
                //console.debug(document.body.scrollTop, scrollTop); //检测锚点
                window.setTimeout(function() {
                    document.body.scrollTop = scrollTop;
                }, 0);
            }).scroll();
        });
        window.setInterval(function() {
            if ($('.mw-mmv-close')[0]) {
                if (mw.config.get('wgMultimediaViewer') !== 'on') {
                    mw.config.set('wgMultimediaViewer', 'on');
                    $('.mw-mmv-image img').off().on('click', function() {
                        window.open($(this).attr('src'), '_blank').focus();
                        return false;
                    });
                    $('.mw-mmv-image').off().on('click', function(e) {
                        if ($(e.target).is('img')) return false;
                        else if ($(e.target).closest('.error-box')[0]) return;
                        else $('.mw-mmv-close').click();
                    });
                }
            } else if (mw.config.get('wgMultimediaViewer') === 'on' && !$('.mw-mmv-close')[0]) $('html, body').add(document).off('scroll.multimediaViewer');
        }, 137);
    }
    //Tabs
    function tabs() {
        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(i) {
            if ($(this).children('.TabLabel')[0]) return true;
            var self = $(this),
                data = $.extend({
                    labelPadding: null,
                    labelBorderColor: null,
                    labelColor: null,
                    labelBackgroundColor: $('#content').css('background-color'),
                    textPadding: null,
                    textBorderColor: null,
                    textBackgroundColor: null,
                    defaultTab: 1,
                }, self.attr('class').length > 4 ? defaultStyle[self.attr('class').slice(5)] || {} : {}, 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() {
                $(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': '#aaa',
                    '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);
                if (label.is(':visible')) tabLabel.height(label.height() + parseFloat(label.css('padding-top')) + parseFloat(label.css('padding-bottom')) + 2);
                else tabLabel.removeAttr('style');
            }).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');
        });
    }
    //子页面页顶链接
    function subpage_links() {
        var links = mw.config.get('wgPageName').split('/'),
            link = '',
            subpages = $('.subpages')[0] ? $('.subpages').remove().empty().text('<') : $('<span class="subpages"/>').text('<'),
            length = links.length - 1,
            index;
        if (mw.config.get('wgPageName').indexOf('Special:移动页面') != -1) links.splice(0, 1);
        for (index = 0; index < length; index++) {
            link += '/' + links[index];
            subpages.append($('<a/>', {
                text: ' ' + links[index],
                href: link
            }));
            if (length - index > 1) subpages.append(" |");
        }
        if (subpages.find('a')[0]) $('#contentSub').prepend(subpages);
    }
    //重复文件列表函数
    function duplicatedFileList() {
        if (window.location.href.indexOf("title") == -1) window.location.replace("http://zh.moegirl.org/index.php?title=Special:ListDuplicatedFiles&limit=500&offset=0");
        $('#mw-content-text .mw-spcontent ol').attr("id", "picOl");
        $('#picOl').before('<p id="picOlTitle">图片列表:</p>').after('<p id="MP3OlTitle">MP3列表:</p><ol start="1" id="MP3Ol"></ol>');
        $("#picOlTitle, #MP3OlTitle").hide();
        $("#picOl").find("[href$='.mp3'], [href$='.ogg']").parent().appendTo("#MP3Ol");
        if ($("#picOl").find("li").length) $("#picOlTitle").show();
        if ($("#MP3Ol").find("li").length) $("#MP3OlTitle").show();
        $(".mw-spcontent > p:nth-child(1), .mw-spcontent > p:nth-child(2), .mw-spcontent > p:nth-child(7)").hide();
    }
    //复制修改内容
    function copyRights() {
        var div = $('<div>', {
                css: {
                    position: 'absolute',
                    left: '-99999px',
                    'z-index': '-99999'
                },
                html: '<pre></pre><br>阅读更多:' + (/%/.test(mw.util.wikiUrlencode(mw.config.get('wgPageName'))) ? mw.config.get('wgPageName') + '(https://zh.moegirl.org/' + encodeURIComponent(mw.config.get('wgPageName')) + ')' : 'https://zh.moegirl.org/' + mw.config.get('wgPageName')) + '<br>本文引自萌娘百科(https://zh.moegirl.org/),文字内容遵守【知识共享 署名-非商业性使用-相同方式共享 3.0】协议。'
            }).appendTo('body'),
            valueNode = div.find('pre');
        $(document.body).on('copy', function() {
            var selection = window.getSelection(),
                value = selection.toString(),
                range = selection.getRangeAt(0);
            if (!value.length || value.length < 128 //当复制内容为空或长度小于定值时不添加声明
                || $(selection.anchorNode).add(selection.basenode).add(selection.focusNode).closest('.Wikiplus-InterBox')[0]) //如果选中了wikiplus的内容
                return;
            valueNode.text(value);
            selection.selectAllChildren(div[0]);
            window.setTimeout(function() { //以下将还原选区
                selection.removeAllRanges();
                selection.addRange(range);
                valueNode.empty();
            }, 0);
        });
    }
    //编辑请求
    function editRequest() {
        var nsIds = mw.config.get('wgNamespaceIds'),
            nsId = mw.config.get('wgNamespaceNumber'),
            ns = [];
        for (var i in nsIds) {
            if (nsIds[i] == nsId) ns.push(i);
        }
        if (!ns[0]) return;
        var user = mw.config.get('wgUserName'),
            usergroup = mw.config.get('wgUserGroups'),
            page = mw.config.get('wgPageName');
        for (var j = 0, l = ns.length; j < l; j++) {
            if (/^[A-Za-z0-9]+[ _]talk$/i.test(ns[j])) return;
            if (/^[a-zA-Z0-9]+$/.test(ns[j])) var talkns = ns[j] + '_talk:';
            page = page.replace(new RegExp('^' + ns[j] + ':', 'i'), '');
        }
        var talkpage = talkns + page;
        if (!$('.permissions-errors')) return;
        var container = $('<div/>', {
            class: 'editRequest'
        });
        container.append('您虽然无权编辑本页面,但您可以点击右侧按钮在本页的讨论页提出编辑请求,让可以编辑的人代为编辑:');
        $('<span/>').addClass("newComment").text('提出编辑请求').on('click', function() {
            window.open('https://zh.moegirl.org/index.php?action=edit&preload=Template:编辑请求/comment&preloadtitle=编辑请求 - ' + mw.config.get("wgUserName") + '&section=new&title=' + talkpage, '_blank');
        }).appendTo(container);
        $('#mw-content-text').children('.wikiEditor-ui:first, textarea[readonly]:first').before('<hr>').before(container);
    }
    /* 函数执行体 */
    $(function() {
        //Template:heimu在safari上的暴力workaround
        if (!/chrome/i.test(navigator.userAgent) && /safari/i.test(navigator.userAgent)) $('.heimu').on('click', function() {
            $(this).toggleClass('off');
        });
        var copyRightsNameSpaces = [ // 以下为允许添加版权声明的名字空间列表
            0, // (主)
            4, // 萌娘百科
            8, // MediaWiki
            10, // Template
            12, // Help
            614 // R18
        ];
        //滚动公告
        setInterval(function() {
            AutoScroll("#scrollDiv");
        }, 5000);
        //Extension:MultimediaViewer的半透明化修改
        if ($('img[srcset][data-file-width][data-file-height]')[0]) multimediaViewer();
        // Add "mainpage" class to the body element
        if (mw.config.get('wgMainPageTitle') === mw.config.get('wgPageName') && mw.config.get('wgAction') === 'view') $('body').addClass('mainpage');
        //重复文件列表区分图片和音频
        if ($(".mw-special-ListDuplicatedFiles").length && $('.mw-spcontent > p').length > 1) duplicatedFileList();
        //需要时载入对应的 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');
        // Tabs执行
        if ($('.Tabs')[0]) tabs();
        //子页面页顶链接
        if (mw.config.get('wgPageName').indexOf('/') != -1 && (mw.config.get('wgNamespaceIds').special != mw.config.get('wgNamespaceNumber') || mw.config.get('wgPageName').indexOf('Special:移动页面') != -1) && !window._unsubpage)
            subpage_links();
        //复制内容版权声明
        if (window.getSelection && mw.config.get('wgUserGroups').indexOf('sysop') + mw.config.get('wgUserGroups').indexOf('patroller') == -2 && ['edit', 'submit'].indexOf(mw.config.get('wgAction')) === -1 && copyRightsNameSpaces.indexOf(mw.config.get('wgNamespaceNumber')) !== -1)
            copyRights();
        //编辑请求
        if (['edit', 'submit'].indexOf(mw.config.get('wgAction')) !== -1 && !mw.config.get('wgIsProbablyEditable') && mw.config.get('wgUserName')) editRequest();
        //修复代码编辑器$.ucFirst引用错误
        jQuery.extend({
            ucFirst: function(s) {
                s += '';
                return s.charAt(0).toUpperCase() + s.substring(1);
            }
        });
        //注释内列表
        $('.reference-text > ul,.reference-text > ol').each(function() {
            if (this.parentElement.childNodes[0] === this) $(this).addClass('listInRef');
        });
        //修正hash跳转错误
        if ($('.mw-collapsible')[0]) mw.loader.using('jquery.makeCollapsible').then(function() {
            $('.mw-collapsible').makeCollapsible();
            var hash = location.hash;
            location.hash = '';
            location.hash = hash;
        });
        //以下代码必须在全部内容加载完成后才能正常工作
        $(window).on('load', function() {
            //语言对应
            $('.mw-helplink').each(function() {
                var linkHref = this.href;
                if (linkHref.indexOf('/zh') != linkHref.length - 3) this.href += '/zh';
            });
        });
    });
})(jQuery, mediaWiki); //立即执行匿名函数并传递原始变量以防止冲突
//</nowiki>