全站通知:
MediaWiki:Common.js
刷
历
编
跳到导航
跳到搜索
注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl + F5或Ctrl + R(Mac为⌘ + R)
- Google Chrome:按Ctrl + Shift + R(Mac为⌘ + Shift + R)
- Internet Explorer:按住Ctrl的同时单击刷新,或按Ctrl + F5
- Opera:前往菜单 → 设置(Mac为Opera → Preferences),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件。
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
/* 参见[[模板:ResourceLoader]]*/
/* 将相关代码用改为DOM加载完成后运行,解决部分情况
模板:ResourceLoader加载不完全的问题 -- 芙兰朵露琪露诺 2021/8/11*/
function cleanComment(index,element){
var comment = $(element).text();//这是评论的具体内容
var patters = [
/^.*邀请码.*/,
/备战群/,
/^.*[群裙]号?[::]?[0-9]{5,10}.*/,
/^.*交流.*/
];
var matchPatterIndex = -1;
for(var pi=0;pi<patters.length;pi++){
var patter = patters[pi];
if(patter.test(comment)){
matchPatterIndex = pi;
break;
}
}
if(matchPatterIndex>-1){
//console.log('匹配到正则:',patters[matchPatterIndex]);
}
else{
//console.log('未匹配到正则');
}
var patter = /^(.*邀请码)?(.*[群裙]号?[::]?[0-9]{5,10})?(.*交流)?(.*备战群)?/;
patter.test(comment);
var dirties = ['弱智','若至','傻逼','煞笔','SB','sb','s13','S13'];
var isContainsDirty = false;
for(var di=0;di<dirties.length;di++){
var dirty = dirties[di];
if(comment.indexOf(dirty)!=-1){
console.log('这里检测到脏话:',dirty)
isContainsDirty = true;
}
}
if(matchPatterIndex>-1){
$(element).text('无效评论已屏蔽')
}
else if(isContainsDirty){
$(element).text('不文明用语已经屏蔽')
}
}
function doCleanComment(){
$.each($('.comment-text'),cleanComment); //$('.comment-text')是选取了所有class为comment-text的元素,这需要css知识;$.each是对所有class为comment-text的元素的元素执行一次cleanComment函数
$.each($('.comment-text-mobile'),cleanComment);
}
var isRunningCleanComment = false;
function startCleanComment(){//请在网页中调用这个函数,开启定期清理评论
if(!isRunningCleanComment){
isRunningCleanComment = true;
setInterval(doCleanComment,2000);//每x毫秒定期执行一次清理评论。
}
}
function stopCleanComment(){//停止清理评论
clearInterval(doCleanComment);
}
function templateResourceLoader() {
$('.resourceLoader').each(function() {
var $x = $(this);
var text = $.trim($x.text());
if (!text) return;
//加载模块
if ($x.data('isModule') == true)
return mw.loader.load(text);
//自动补充MediaWiki命名空间
var ns = text.match('^.*?:');
if (!ns) text = 'MediaWiki:' + text;
//加载CSS样式表
var mime = ($x.data('mime') || "text/javascript").toLowerCase();
if (mime == "text/css") {
if (text.slice(-4).toLowerCase() !== '.css') text = text + '.css';
//if ($x.data('debug') !== true) text = text + '&debug=false';
return mw.loader.load("//wiki.biligame.com/yanyu/index.php?title="+text+"&action=raw&ctype=text/css", "text/css");
}
//加载JS脚本
if (ns && ns[0].toLowerCase() !== 'mediawiki:') {
return console.log('ResourceLoader: 不允许加载MediaWiki以外的js脚本');
}
if (text.slice(-3).toLowerCase() !== '.js') text = text + '.js';
//加载ES6模块
if ($x.data('isModuleEs6') == true)
return loadModuleES6("//wiki.biligame.com/yanyu/index.php?title="+text+"&action=raw&ctype=text/javascript", function() {
console.log("ResourceLoader: 加载ES6模块 => " + text);
});
//加载React模块
if ($x.data('isModuleReact')) {
if ($x.data('isModuleReact')[0]) {
$.getScript("//wiki.biligame.com/yanyu/index.php?title=MediaWiki:React.development.min.js&action=raw&ctype=text/javascript", function() {
$.getScript("//wiki.biligame.com/yanyu/index.php?title=MediaWiki:React-dom.development.min.js&action=raw&ctype=text/javascript", function() {
console.log("ReactENV => React/ReactDOM Loaded! React is Available For This Page!");
console.log("%c React开发提示 %c 请务必在JS编辑界面右下角使用React同步器同步编译你的JSX代码,否则它将不起任何作用", "color: #fff; padding: 5px 0; background: blue;", "padding: 5px 5px 5px 0; background: #e5e5ff; color:blue");
$('.resourceLoader').each(function() {
var $xr = $(this);
var textr = $.trim($xr.text());
if (!textr) return;
//自动为React模块补充MediaWiki命名空间与-babel后缀
var nsr = textr.match('^.*?:');
if (!nsr) textr = 'MediaWiki:' + textr.slice(0, -3);
textr += '-babel.js';
if ($xr.data('isModuleReact') && $xr.data('isModuleReact')[1]) {
loadModuleES6("//wiki.biligame.com/yanyu/index.php?title="+textr+"&action=raw&ctype=text/javascript", function() {
console.log("ResourceLoader: 加载React模块 => " + textr);
});
}
});
});
});
return;
}
}
//加载普通脚本
console.log('ResourceLoader: 加载JS => ' + text);
//if ($x.data('debug') !== true) text = text + '&debug=false';
return mw.loader.load("//wiki.biligame.com/yanyu/index.php?title="+text+"&action=raw&ctype=text/javascript", "text/javascript");
});
}
if (document.readyState == 'loading') {
document.addEventListener('DOMContentLoaded', templateResourceLoader);
} else {
templateResourceLoader();
}
//加载ES6模块
function loadModuleES6(src, callback) {
var script = document.createElement('script'),
head = document.getElementsByTagName('head')[0];
script.type = 'module';
script.charset = 'UTF-8';
script.src = src;
if (script.addEventListener) {
script.addEventListener('load', function () {
callback();
}, false);
} else if (script.attachEvent) {
script.attachEvent('onreadystatechange', function () {
var target = window.event.srcElement;
if (target.readyState == 'loaded') {
callback();
}
});
}
head.appendChild(script);
}
/* CardSelectTr筛选引入 */
// 用于对CardSelectTr表格进行筛选排序
function updateFilterData() {}
$(function InitCardSelect() {
var self = {};
var selectOptions; //所有筛选按钮
var filters = {}; //当前筛选规则
var filterKeys = []; //所有筛选Key
var showAll = true; //不筛选,显示全部
var tableRows; //所有要被筛选的行
var computedRows; //筛选后的行
var $sorter; //当前进行排序的表头
var sortDesent = false; //反向排序
function isNil(s) {
return s === '' || s === undefined || s === null || s === false
}
//点击筛选按钮时
function OnSelectOptionClick(e) {
var $x = e.data;
e.preventDefault();
var label = '['+$.trim($x.text())+'] 筛选';
console.time(label);
//显示全部
if ($x.FilterKey == 0) {
for (i in selectOptions) {
selectOptions[i].Select = false;
selectOptions[i].removeClass('selected');
}
filters = {};
showAll = true;
//更新表格
self.FilterRows();
console.timeEnd(label);
return;
}
showAll = false;
var select = !$x.Select;
$x.Select = select;
//变更筛选状态
var key = $x.FilterKey;
filters[key] = filters[key] || {};
var opt = $x.FilterOpt == "AND" ? "AND" : "OR";
filters[key][opt] = filters[key][opt] || [];
if (select) {
filters[key][opt].push($x.FilterValue);
} else {
filters[key][opt] = filters[key][opt].filter(function(x) {
return x !== $x.FilterValue;
});
if (filters[key][opt].length < 1) delete filters[key][opt];
}
select ? $x.addClass('selected') : $x.removeClass('selected');
self.FilterRows();
console.timeEnd(label);
}
function OnHeaderSortClick(e) {
var $x = e.data;
e.preventDefault();
var label = '['+$.trim($x.text())+'] 排序';
console.time(label);
if ($sorter !== $x) {
//第一次:新的排序
$sorter = $x;
sortDesent = false;
} else if (!sortDesent) {
//第二次:切换排序
sortDesent = true;
} else {
//第三次:不进行排序
$sorter = null;
}
self.SortRows();
console.timeEnd(label);
}
//初始化
self.Init = function () {
selectOptions = $('.cardSelectOption').toArray().map(function(x) {
var $x = $(x);
var dataOption = $.trim($x.data('option'));
var dataGroup = $.trim($x.data('group'));
if (isNil(dataOption) || isNil(dataGroup)) return $x;
var splt = dataOption.split('|');
$x.FilterKey = dataGroup;
$x.FilterValue = $.trim(splt[1]);
$x.FilterOpt = $.trim($x.data('opt') || 'OR').toUpperCase();
if (filterKeys.indexOf(dataGroup) < 0)
filterKeys.push(dataGroup);
return $x;
});
//$head = $('#CardSelectTabHeader');
updateFilterData = function () {
var rows = $('#CardSelectTr>tbody>tr').toArray();
if (rows.length == 0) {
rows = $('#CardSelectTr .divsort').toArray();
}
tableRows = rows.map( function(x) {
var $x = $(x);
//if (x == $head[0]) continue;
for (i in filterKeys) {
var key = filterKeys[i];
var val = x.dataset['param'+key];
if (val === undefined) continue;
if (typeof val == 'number'){
val = val.toString(10);
}
var splt = val.split(',');
for (j in splt) {
var s = $.trim(splt[j]);
if (!isNil(s)) {
$x.FilterData = $x.FilterData || {};
$x.FilterData[key] = $x.FilterData[key] || [];
$x.FilterData[key].push(s);
}
}
if($x.FilterData[key] === undefined) {
$x.FilterData[key] = ['0'];
}
}
return $x;
});
}
updateFilterData();
//computedRows = tableRows.concat([]);
$('#CardSelectTr>thead>tr>th.dataHeader').each(function(index, x) {
var $x = $(x);
$x.off('click').off('mousedown');
if ($x.hasClass('headerSort')) {
$x.Index = index;
//$x.SortKey = $x.data('group');
$x.click($x, OnHeaderSortClick);
}
});
for (i in selectOptions) {
selectOptions[i].click(selectOptions[i], OnSelectOptionClick);
}
}
//t1中包含t2中所有项
function includeAll(t1, t2) {
for (i in t2) {
if (t1.indexOf(t2[i]) < 0) return false;
}
return true;
}
//t1中包含t2中的任一项
function includeAny(t1, t2) {
if (t2.length == 0) return true;
for (i in t2) {
if (t1.indexOf(t2[i]) > -1) return true;
}
return false;
}
//使用show/hide来显示表格行
self.FilterRows = function() {
if (showAll) {
filters = {};
}
$('#CardSelectTr>tbody').hide();
for (var idx in tableRows) {
var $x = tableRows[idx];
var data = $x.FilterData;
var hide = false;
for (key in filters) {
hide = !data || !data[key];
if (!hide && filters[key]['AND']) {
hide = !includeAll(data[key],filters[key]['AND']);
}
if (!hide && filters[key]['OR']) {
hide = !includeAny(data[key],filters[key]['OR']);
}
if (hide) break;
}
if (!$x.Hide || (!hide != !$x.Hide)) {
$x.Hide = hide;
hide ? $x.hide() : $x.show();
}
}
$('#CardSelectTr .headerSort').removeClass('headerSortDown headerSortUp');
$('#CardSelectTr>tbody').show();
$sorter = null;
}
function grabSortData($tr, index) {
$tr.SortData = $tr.SortData || [];
if ($tr.SortData[index] !== undefined) return $tr.SortData[index];
var td = $tr.children('td')[index];
if (!td) {
$tr.SortData[index] = -1;
return -1;
}
var text = $.trim(td.textContent);
if (text.endsWith("s/轮")) {
text = text.substring(0, text.length-3)
}
$tr.SortData[index] = text;
return text;
}
//对行排序,不显示的行会被移除
self.SortRows = function() {
//var residues = [];
if (!$sorter) {
computedRows = tableRows.filter(function($x) { return !$x.Hide; });
$('#CardSelectTr .headerSort').removeClass('headerSortDown headerSortUp');
}
else if (!sortDesent) {
var index = $sorter.Index;
computedRows = tableRows.filter(function($x) { return !$x.Hide; });
computedRows.sort(function compareFunction($x, $y) {
var x = grabSortData($x, index);
var y = grabSortData($y, index);
var nx = + x;
var ny = + y;
return (isNaN(nx) || isNaN(ny))
? isNaN(nx) && isNaN(ny)
? x < y ? -1 : 1
: isNaN(nx) ? 1 : -1 //字符串排后
: nx === ny
? 0
: nx < ny ? -1 : 1; //数值小的排前
//console.log (`${x} ~ ${y} => ${ret}`);
//return ret;
});
$('#CardSelectTr .headerSort').removeClass('headerSortDown headerSortUp');
$sorter.addClass('headerSortDown');
}
else {
computedRows.reverse();
$('#CardSelectTr .headerSort').removeClass('headerSortDown headerSortUp');
$sorter.addClass('headerSortUp');
}
$('#CardSelectTr>tbody').hide()
.prepend(computedRows)
.show();
}
$('.cardSelectOption').off('click').off('mousedown');
if ($('#CardSelectTabHeader').parent().is('tbody')){
$('#CardSelectTr').prepend( $('<thead/>').append($('#CardSelectTabHeader')));
}
if ($('#CardSelectTabHeader1').parent().is('tbody')){
$('#CardSelectTr>thead').append($('#CardSelectTabHeader1'));
}
self.Init();
console.log('CardSelectTr.js Initialized.');
return self;
});
/* 编辑器插件SmartClick引入 */
$(function(){
mw.loader.load("//wiki.biligame.com" + mw.util.wikiScript("") + "?title=MediaWiki:SmartClick.js&action=raw&ctype=text/javascript", "text/javascript");
console.log("SmartClick.js initialized!");
});
/* --编辑摘要-- */
//参考Wikipedia:MediaWiki:Common.js/edit.js
if (mw.config.get('wgAction') == "edit" || mw.config.get('wgAction') == "submit" || mw.config.get('wgCanonicalSpecialPageName') == 'Search') { // 编辑页面
( function( $, mw ) { $( function() {
if ( $( '#editform input[name=wpSection]' ).val() === 'new' ) {
if ( $( '#no-new-title' ).length ) {
$( '#wpSummary' ).attr( 'disabled', true );
}
return;
}
$( '#wpSummaryLabel .mw-summary-preset' ).on( 'click', '.mw-summary-preset-item a', function( e ) {
e.preventDefault();
var $this = $( this ), summary = $( '#wpSummary' ).val();
var $item = $this.parent( '.mw-summary-preset-item' );
summary = summary.replace( /\s+$/g, '' );
if ( summary != '' ) {
summary += ' ';
}
summary += $item.attr( 'title' ) || $this.text();
$this.replaceWith( $this.contents() );
$( '#wpSummary' ).val( summary ).focus();
} );
} ); } )( jQuery, mediaWiki );
}
/* == 加载Bikit == */
try { mw.loader.load('//wiki.biligame.com/tools/MediaWiki:Bikit.js?action=raw&ctype=text/javascript');} catch(e) {}
/* == 动态加载 == */
try { mw.loader.load('//wiki.biligame.com/wiki/MediaWiki:Asyncloader.js?action=raw&ctype=text/javascript');} catch(e) {}
/*加载DiffTool 爱来自 Lu(39886146) */
try { mw.loader.load("/tools/MediaWiki:DiffTool.js?action=raw&ctype=text/javascript", "text/javascript");} catch(e) {}
/*检测js是否正常加载*/
$(document).ready(function() {
setTimeout(function() {
document.getElementById("wiki-resourceloader-check").style.display="none";
var purgeThisPage = document.getElementById("PurgeThisPageSiteNotice")
if (purgeThisPage) {
var link = purgeThisPage.children[0]
link.href = link.href.replace("FullPageName", mw.config.values.wgPageName)
}
} ,2000);
startCleanComment();//开启评论清理
});
//Dragscroll.js
!function(e,n){"function"==typeof define&&define.amd?define(["exports"],n):n("undefined"!=typeof exports?exports:e.dragscroll={})}(this,function(e){var n,t,o=window,l=document,c="mousemove",r="mouseup",i="mousedown",m="EventListener",d="add"+m,s="remove"+m,f=[],u=function(e,m){for(e=0;e<f.length;)m=f[e++],m=m.container||m,m[s](i,m.md,0),o[s](r,m.mu,0),o[s](c,m.mm,0);for(f=[].slice.call(l.getElementsByClassName("dragscroll")),e=0;e<f.length;)!function(e,m,s,f,u,a){(a=e.container||e)[d](i,a.md=function(n){e.hasAttribute("nochilddrag")&&l.elementFromPoint(n.pageX,n.pageY)!=a||(f=1,m=n.clientX,s=n.clientY,n.preventDefault())},0),o[d](r,a.mu=function(){f=0},0),o[d](c,a.mm=function(o){f&&((u=e.scroller||e).scrollLeft-=n=-m+(m=o.clientX),u.scrollTop-=t=-s+(s=o.clientY),e==l.body&&((u=l.documentElement).scrollLeft-=n,u.scrollTop-=t))},0)}(f[e++])};"complete"==l.readyState?u():o[d]("load",u,0),e.reset=u});
/* == 评论区表情包 == */
$(function () {
"use strict";
mw.loader.load(
"//wiki.biligame.com/yanyu/index.php?title=MediaWiki:Emotes.js&action=raw&ctype=text/javascript",
"text/javascript"
);
});
/* 回到顶部 */
$(function() {
var txt = " ",
btn = $('<div/>', {
'text': txt,
'attr': {
'title': txt,
'class': 'backToTop'
},
'css': {
'user-select': 'none'
},
'on': {
'click': function() {
$("html, body").animate({
scrollTop: 0
}, 120);
}
}
}).appendTo(document.body);
$(window).on('scroll', function() {
$(document).scrollTop() > 0 ? btn.fadeIn() : btn.fadeOut();
}).scroll();
});