查看“MediaWiki:Common.js”的源代码
←
MediaWiki:Common.js
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
此页提供此wiki软件的界面文字,并受到保护以防止滥用。如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
/* eslint-disable comma-dangle */ // <nowiki> /* 这里的任何JavaScript将在全站加载 * 请尊重萌娘百科版权,以下代码复制需要注明原自萌娘百科,并且附上URL地址http://zh.moegirl.org/MediaWiki:Common.js * 版权协定:知识共享 署名-非商业性使用-相同方式共享 3.0 * loader模块 写法参见 https://www.mediawiki.org/wiki/ResourceLoader/Modules#mw.loader.load */ (function ($, mw) { //使用匿名函数防止污染顶级变量 /* Polyfill */ // Production steps of ECMA-262, Edition 6, 22.1.2.1 // Reference: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from /* eslint-disable eqeqeq */ if (!Array.from) { Array.from = (function () { var toStr = Object.prototype.toString; var isCallable = function (fn) { return typeof fn === 'function' || toStr.call(fn) === '[object Function]'; }; var toInteger = function (value) { var number = Number(value); if (isNaN(number)) { return 0; } if (number === 0 || !isFinite(number)) { return number; } return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number)); }; var maxSafeInteger = Math.pow(2, 53) - 1; var toLength = function (value) { var len = toInteger(value); return Math.min(Math.max(len, 0), maxSafeInteger); }; // The length property of the from method is 1. return function from(arrayLike /*, mapFn, thisArg */) { // 1. Let C be the this value. var C = this; // 2. Let items be ToObject(arrayLike). var items = Object(arrayLike); // 3. ReturnIfAbrupt(items). if (arrayLike == null) { // jshint ignore:line throw new TypeError("Cannot convert undefined or null to object"); } // 4. If mapfn is undefined, then let mapping be false. var mapFn = arguments.length > 1 ? arguments[1] : void undefined; var T; if (typeof mapFn !== 'undefined') { // 5. else // 5. a If IsCallable(mapfn) is false, throw a TypeError exception. if (!isCallable(mapFn)) { throw new TypeError(mapFn + " is not a function"); } // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined. if (arguments.length > 2) { T = arguments[2]; } } // 10. Let lenValue be Get(items, "length"). // 11. Let len be ToLength(lenValue). var len = toLength(items.length); // 13. If IsConstructor(C) is true, then // 13. a. Let A be the result of calling the [[Construct]] internal method // of C with an argument list containing the single item len. // 14. a. Else, Let A be ArrayCreate(len). var A = isCallable(C) ? Object(new C(len)) : new Array(len); // 16. Let k be 0. var k = 0; // 17. Repeat, while k < len… (also steps a - h) var kValue; while (k < len) { kValue = items[k]; if (mapFn) { A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k); } else { A[k] = kValue; } k += 1; } // 18. Let putStatus be Put(A, "length", len, true). A.length = len; // 20. Return A. return A; }; }()); } /* eslint-enable eqeqeq */ /* 反嵌入反反代 */ (function () { if (top !== window && !['translate.google.com', 'www.microsofttranslator.com'].includes(top.location.host)) { top.location.replace('https://zh.moegirl.org/' + mw.config.get('wgPageName')); } else if (!/\.moegirl\.org$/i.test(location.host)) { var reverseProxyhostAlerted = []; if (sessionStorage.getItem('reverse proxy alerted') !== null) { try { reverseProxyhostAlerted = JSON.parse(sessionStorage.getItem('reverse proxy alerted')); if (!Array.isArray(reverseProxyhostAlerted)) reverseProxyhostAlerted = []; } catch (e) { reverseProxyhostAlerted = []; } } sessionStorage.setItem('reverse proxy alerted', JSON.stringify(reverseProxyhostAlerted)); } })(); /* 函数定义体 */ //滚动公告 function AutoScroll(obj) { $(obj).animate({ "height": "show", "paddingTop": "show", "marginTop": "show", "paddingBottom": "show", "marginBottom": "show" }); var isFrozen = false; setInterval(function () { if (!isFrozen) { $(obj).find("ul:first").animate({ marginTop: "-25px" }, 500, function () { $(this).css({ marginTop: "0px" }).find("li:first").appendTo(this); }); } }, 5000); $(window).on({ blur: function () { isFrozen = true; }, focus: function () { isFrozen = false; } }); } //Extension:MultimediaViewer的半透明化修改,用于保持背景文字处于原位,本应修改插件达成的,暂时先用JavaScript应急处理下 function multimediaViewer() { var _scrollTo = window.scrollTo; var flag = location.hash !== ""; window.scrollTo = function scrollTo(x_option, y) { if (flag) { console.info('Prevent multimediaViewer called'); } else { if (y === undefined) _scrollTo(x_option); else _scrollTo(x_option, y); } }; setInterval(function () { $('a.image img[data-file-width], a.image img[data-file-height], .mw-mmv-filepage-buttons a.mw-mmv-view-expanded').not('.multimediaViewerScrollSet').each(function () { this.addEventListener('click', function (e) { if ($(e.target).closest('.TabLabelText')[0] || $(e.target).closest('a').closest('.mw-customtoggle')[0]) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); return false; } flag = true; }, { capture: true }); $(this).addClass('multimediaViewerScrollSet'); }); if ($('.mw-mmv-close')[0]) { if (mw.config.get('wgMultimediaViewer') !== 'on') { mw.config.set('wgMultimediaViewer', 'on'); $('.mw-mmv-image').off('click')[0].addEventListener('click', function (e) { if ($(e.target).is('img')) { window.open($(e.target).attr('src').replace(/(img\.moegirl\.org\/common\/)thumb\/([a-z\d]+\/[a-z\d]+\/)([^\/]+)\/\d+px-\3/i, "$1$2$3"), '_blank').focus(); e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); return false; } else if ($(e.target).closest('.error-box')[0]) return; else $('.mw-mmv-close').click(); }, { capture: true }); } } else if (mw.config.get('wgMultimediaViewer') === 'on') { flag = false; mw.config.set('wgMultimediaViewer', 'off'); } }, 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), 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, min-height: null }, 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': '#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.outerHeight(true)); 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>\n阅读更多:' + (/%/.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>\n本文引自萌娘百科(https://zh.moegirl.org/),文字内容默认使用【知识共享 署名-非商业性使用-相同方式共享 3.0】协议。' }).appendTo('body'), valueNode = div.find('pre'); $('#mw-content-text').on('copy', function (e) { var selection = window.getSelection(), value = selection.toString(), range = selection.getRangeAt(0); if (!value.length || value.length > 0 || //不添加声明 $(selection.anchorNode).add(selection.basenode).add(selection.focusNode).closest('.Wikiplus-InterBox')[0]) //如果选中了wikiplus的内容 return; valueNode.text(value); /* if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.setData) { e.originalEvent.clipboardData.setData("text/plain", div.text()); e.originalEvent.clipboardData.setData("text/html", div.html()); } else { */ selection.selectAllChildren(div[0]); window.setTimeout(function () { //以下将还原选区 selection.removeAllRanges(); selection.addRange(range); valueNode.empty(); }, 0); // } }); } //防滥用即将删除模板 function antiAbuseListener(textarea, event) { var filters = [ "{{即将删除", "{{即將刪除", "{{挂删", "{{模板:即将删除", "{{模板:即將刪除", "{{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("萌娘百科提醒您<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://zh.moegirl.org/Talk:%E6%8F%90%E9%97%AE%E6%B1%82%E5%8A%A9%E5%8C%BA">提问求助区</a>提问。'); windowManager.openWindow(messageDialog, { actions: [{ action: 'accept', label: '我知道了', flags: 'primary' }] }); event.preventDefault(); event.stopImmediatePropagation(); 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); } }); } /* 函数执行体 */ $(function () { //Template:heimu在safari上的暴力workaround mw.loader.using('jquery.client', function () { if ($.client.profile().name === 'safari') $('.heimu').on('click', function () { $(this).toggleClass('off'); }); }); var copyRightsNameSpaces = [ // 以下为允许添加版权声明的名字空间列表 0, // (主) 4, // 萌娘百科 8, // MediaWiki 10, // Template 12, // Help 614 // R18 ]; //滚动公告 AutoScroll("#scrollDiv"); //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'); }); //列表侧边距 setInterval(function () { $('.mw-parser-output ul, .mw-parser-output ol').not('.margin-left-set').each(function () { if (/^none.+none$/i.test($(this).css('list-style')) || $(this).is('.gallery')) { if ($(this).parent().is('li') && $(this).parent().parent().is('ul,ol')) $(this).css('margin-left', '1.2em'); else $(this).css('margin-left', '0.2em'); } else if ($(this).is('ol')) { var l = $(this).children('li').length; if ($(this).attr('start')) l += parseInt($(this).attr('start')); $(this).css('margin-left', (l + '').length * 0.5 + 1.2 + 'em'); } else $(this).css('margin-left', '1.2em'); $(this).addClass('margin-left-set'); }); }, 200); //修正hash跳转错误 if ($('.mw-collapsible')[0]) mw.loader.using('jquery.makeCollapsible', function () { $('.mw-collapsible').makeCollapsible(); var hash = location.hash; location.hash = ''; location.hash = hash; }); //防滥用即将删除 if (!mw.config.get('wgUserGroups').includes('sysop') && !mw.config.get('wgUserGroups').includes('patroller')) { setInterval(function () { if ($('.Wikiplus-InterBox')[0]) { var target = $('.Wikiplus-InterBox'); if (target.data('isTrusted') !== true) { target.data('isTrusted', true); target.css('z-index', 100); antiAbuse($('#Wikiplus-Quickedit')[0], $('#Wikiplus-Quickedit-Submit')[0], undefined); var events = $._data($('#Wikiplus-Quickedit')[0], 'events'); if (events && events.keydown) { events.keydown.sort(function (a, b) { return a.guid - b.guid; }); events.keydown[0].handler = function (e) { if (e.ctrlKey && e.which === 83) { if (e.shiftKey) { $('#Wikiplus-Quickedit-MinorEdit').click(); } if (antiAbuseListener($('#Wikiplus-Quickedit')[0], e) !== false) { $('#Wikiplus-Quickedit-Submit').click(); e.preventDefault(); e.stopPropagation(); } } }; } } } if ($('form#editform')[0]) { target = $('form#editform'); if (target.data('isTrusted') !== true) { target.data('isTrusted', true); antiAbuse($('#wpTextbox1')[0], $('#wpSave')[0], target[0]); } } }, 1000); } //以下代码必须在全部内容加载完成后才能正常工作 $(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>
返回至
MediaWiki:Common.js
。
导航菜单
个人工具
登录
名字空间
消息
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
舰娘图鉴
装备图鉴
游戏机制
勋章陈列
剧情一览
活动日志
卡池列表
最近更改
随机页面
帮助
工具
链入页面
相关更改
上传文件
特殊页面
页面信息