MediaWiki:Gadget-FlowThreadCheck.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),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件。
/* globals $ */
$(function() {
var rules = [],
checkBox = {
node: $('<div id="flowthreadCheckBox"><div id="flowthreadCheckBoxTitle"><div id="flowthreadCheckBoxTitleContent">评论预览</div><span id="flowthreadCheckBoxCloseButton">×</span></div><div id="flowthreadCheckBoxContent"><div id="flowthreadCheckBoxContentBox"></div></div></div>').css('margin-left', ($(window).width() - 600) / 2 + 'px').appendTo(document.body),
closeButton: $('#flowthreadCheckBoxCloseButton').on('click', checkBoxFadeOut),
content: $('#flowthreadCheckBoxContentBox')
};
function addCheckButton() {
$('.comment-submit').each(function() {
var submitButton = $(this);
if (submitButton.data('addCheckButton') === true) return;
var checkButton = $('<button/>').text('评论检查').addClass('comment-check').css('right', submitButton.width() + parseInt(submitButton.css('right')) - parseInt(submitButton.css('border-width')));
checkButton.on('click', showCheckBox);
submitButton.before(checkButton).data('addCheckButton', true);
});
}
function checkBoxFadeIn() {
return checkBox.node.fadeIn(370).delay(370);
}
function checkBoxFadeOut() {
return checkBox.node.fadeOut(370).delay(370);
}
function showError(text) {
checkBoxFadeIn().queue(function() {
$(this).text(text).dequeue();
});
}
function showCheckBox() {
var self = this,
text = $(this).closest('.comment-replybox').find('textarea').val();
if (/\s{1307,}/.test(text)) return alert('输入内容有误,请不要输入那么多空格');
if (!text) return alert('请输入评论内容后检查');
if (checkBox.content.text()) checkBox.content.empty();
if (!rules[0]) $.ajax({
url: '//zh.moegirl.org/MediaWiki:Flowthread-blacklist?action=raw',
type: 'GET',
success: function(data) {
rules = data.split('\n');
rules.splice(0, 5);
rules.forEach(function(v, i) {
var length = v.lastIndexOf(' #') == -1 ? i.length : v.lastIndexOf(' #'),
regexp = v.slice(0, length);
if (!/^ *\#/.test(v) && regexp) rules[i] = RegExp(regexp);
else rules[i] = /\s{1307,}/;
});
checkText(text);
},
error: function() {
showCheckBox.call(self);
}
});
else checkText(text);
}
function checkText(text) {
var errorText = [];
rules.forEach(function(v) {
var r = RegExp(v, 'g');
if (r.test(text)) errorText.push([v, text.match(r)]);
});
checkBoxFadeIn();
if (!errorText[0]) checkBox.content.append('您的评论没有触发黑名单机制。');
else {
var table = checkBox.content.append('您的评论触发以下黑名单(使用正则表达式<sup><a rel="nofollow" target="_blank" class="external text" href="http://baike' + '.baidu.com/view/94238.htm">解释</a></sup>):').append($('<table/>')).find('table');
table.append('<tr><th>No.</th><th>黑名单</th><th>命中字符串</th></tr>');
errorText.forEach(function(n) {
table.append(
$('<tr/>').append($('<td/>').addClass('first').text(table.find('tr').length))
.append($('<td/>').text(n[0]))
.append($('<td/>').append(n[1].map(function(t) {
return '<code>' + $('<span/>').text(t).html() + '</code>';
}).join('<br/>')))
);
});
}
}
addCheckButton();
$('.comment-container').on('click', function(e) {
if ($(e.target).hasClass("comment-reply")) window.setTimeout(function() {
addCheckButton();
}, 0);
});
});