/**
* Support for quick handling of reports on [[User:XLinkBot/RevertList]]/[[MediaWiki talk:Spam blacklist]]/[[MediaWiki talk:Spam whitelist]] and in the [[Wikipedia:WikiProject Spam/Local/<domain>]]-tree at en.wikipedia.
* See [[:m:User:Erwin/SBHandler]] for more information.
* Tested in Firefox/Chrome.
*
* Author: [[:m:User:Erwin]], October 2008 - February 2009
* License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)
*
* Version history:
*
* - This tool uses code from DelReqHandler at Commons.
* Author: [[:Commons:User:Lupo]], October 2007 - January 2008
* License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)
*
* - Script adapted to account for change in section edit links -- [[m:user:billinghurst]] 2013-05
*
* - User sDrewth reported the script is broken. -- 2013-11-27
*
* - Cleaned up to pass JSHint, and migratedB use of (now deprecated) legacy wikibits tof
* jQuery and newer MediaWiki core built-in javascript libraries. --Krinkle 2013-11-28
*
* - ported to en.wikipedia, adapted which pages to handle --Beetstra 2015-04-25
*/
/*jshint unused:true, eqnull:true, browser:true, white:true, indent:4 */
/*global mw, $ */
/*global BLHandlerAddComment, BLHandlerRemComment, BLHandlerCloseComment, BLHandlerRevComment, BLHandlerDecComment */
// <nowiki>
(function () {
// Guard against double inclusions
if (typeof window.BLHandler !== 'undefined') {
return;
}
var conf = mw.config.get([
'wgUserGroups',
'wgPageName',
'wgServer',
'wgScriptPath',
'wgUserName'
]);
if ((conf.wgPageName.substr(0, 33) !== 'Wikipedia:WikiProject_Spam/Local/') && (conf.wgPageName !== 'User_talk:XLinkBot/RevertList') && (conf.wgPageName !== 'Wikipedia_talk:WikiProject_Spam') && (conf.wgPageName !== 'MediaWiki_talk:Spam-blacklist') && (conf.wgPageName !== 'Special:SpamBlackList')) {
return;
}
var action, fakesource, urls, params, logtitle, tprevid, log_text, summary;
var BLrequest;
var BLdebug;
var BLlist;
var BLlog;
var BLUtils = {
// userIsInGroup (from Commons:MediaWiki:Utilities.js)
UserIsInGroup: function (group) {
if (conf.wgUserGroups) {
if (!group || group.length === 0) {
group = '*';
}
for (var i = 0; i < conf.wgUserGroups.length; i++) {
if (conf.wgUserGroups[i] === group) {
return true;
}
}
}
return false;
},
// setEditSummary (from Commons:MediaWiki:Utilities.js)
setEditSummary: function (text) {
if (document.editform == null || document.editform.wpSummary == null) {
return;
}
var summary = document.editform.wpSummary.value;
if (summary == null || summary.length === 0) {
document.editform.wpSummary.value = text;
} else if (summary.substr(-3) === '*/ ' || summary.substr(-2) === '*/') {
document.editform.wpSummary.value += text;
} else {
document.editform.wpSummary.value += '; ' + text;
}
},
// makeRawLink (from Commons:MediaWiki:Utilities.js)
makeRawLink: function (name, url, target) {
var link = document.createElement('a');
link.setAttribute('href', url);
if (target) {
link.setAttribute('target', target);
}
link.appendChild(document.createTextNode(name));
return link;
},
// The following function is defined in several places, and unfortunately, it is defined
// wrongly in some places. (For instance, in [[:en:User:Lupin/popups.js]]: it should use
// decodeURIComponent, not decodeURI!!!) Make sure we've got the right version here:
getParamValue: function (paramName) {
var cmdRe = new RegExp('[&?]' + paramName + '=([^&]*)');
var m = cmdRe.exec(document.location.href);
if (m) {
try {
return decodeURIComponent(m[1]);
} catch (someError) {}
}
return null;
}
};
/**** Enable the whole shebang only for sysops and stewards. */
var BLHandler;
if (BLUtils.UserIsInGroup('sysop') || BLUtils.UserIsInGroup('steward')) {
BLHandler = {
/*------------------------------------------------------------------------------------------
User:XLinkBot/RevertList requests closing: add "[add]", "[remove]", "[reverted]" and "[decline]" links to
the left of the section edit links of a request.
------------------------------------------------------------------------------------------*/
rl_close_add: 'rl_close_add',
rl_close_rem: 'rl_close_rem',
rrl_close_add: 'rrl_close_add',
rrl_close_rem: 'rrl_close_rem',
rl_close_na: 'rl_close_na',
rl_close_rev: 'rl_close_rev',
rl_close_dec: 'rl_close_dec',
rl_add: 'addRL',
rl_rem: 'remRL',
rrl_add: 'addRefRL',
rrl_rem: 'remRefRL',
bl_close_add: 'bl_close_add',
bl_close_rem: 'bl_close_rem',
bl_close_na: 'bl_close_na',
bl_close_rev: 'bl_close_rev',
bl_close_dec: 'bl_close_dec',
bl_deferwhite_dec: 'bl_deferwhite_dec',
bl_stale_dec: 'bl_stale_dec',
bl_NR_dec: 'bl_NR_dec',
bl_BFR_dec: 'bl_BFR_dec',
bl_meta_add: 'bl_meta_add',
bl_meta_done: 'bl_meta_done',
bl_meta_rem: 'bl_meta_rem',
bl_add: 'addBL',
bl_rem: 'remBL',
bl_ublock_dec: 'UBlock',
BLcloseRequestLinks: function () {
function addRequestLinks(name, href, before, parent) {
parent.insertBefore(document.createTextNode('['), before);
parent.insertBefore(BLUtils.makeRawLink(name, href), before);
parent.insertBefore(document.createTextNode(']'), before);
}
var param = BLUtils.getParamValue('fakeaction');
fakesource = BLUtils.getParamValue('fakesource');
var wpAction = BLUtils.getParamValue('action');
var edit_lks, anchors, ignore;
var anchor, href, orig_bracket, title, lk_name1, lk_action1, lk_action2;
if (param == null) {
if (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/') {
edit_lks = $('span.mw-editsection').toArray();
if (edit_lks.length === 0) {
return;
}
i = edit_lks.length - 1;
anchors = edit_lks[i].getElementsByTagName('a');
if (anchors != null && anchors.length > 0) {
anchor = anchors[0];
href = anchor.getAttribute('href');
if (href.indexOf('§ion=') > 0) {
orig_bracket = edit_lks[i].firstChild;
addRequestLinks('close', href + '&fakesource=localreport&fakeaction=' + BLHandler.bl_close_na, orig_bracket, edit_lks[i]);
addRequestLinks('reverted', href + '&fakesource=localreport&fakeaction=' + BLHandler.bl_close_rev, orig_bracket, edit_lks[i]);
addRequestLinks('add BL', href + '&fakesource=localreport&fakeaction=' + BLHandler.bl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('add RL', href + '&fakesource=localreport&fakeaction=' + BLHandler.rl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('add RefRL', href + '&fakesource=localreport&fakeaction=' + BLHandler.rrl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('defer meta', href + '&fakesource=localreport&fakeaction=' + BLHandler.bl_meta_add, orig_bracket, edit_lks[i]);
addRequestLinks('meta done', href + '&fakesource=localreport&fakeaction=' + BLHandler.bl_meta_done, orig_bracket, edit_lks[i]);
}
}
} else if (conf.wgPageName === 'User_talk:XLinkBot/RevertList') {
// We're on [[User_talk:XLinkBot/RevertList]]
edit_lks = $('span.mw-editsection').toArray();
if (edit_lks.length === 0) {
return;
}
for (i = 0; i < edit_lks.length; i++) {
// Set to true if the addition or removal section is found
ignore = false;
// Find the A within:
anchors = edit_lks[i].getElementsByTagName('a');
if (anchors != null && anchors.length > 0) {
anchor = anchors[0];
href = anchor.getAttribute('href');
title = anchor.getAttribute('title');
if (title.indexOf('additions') > 0 ) {
ignore = true;
lk_name1 = 'add RL';
} else if (title.indexOf('removals') > 0) {
ignore = true;
lk_name1 = 'rem RL';
} else if (title.indexOf('problems') > 0) {
lk_name1 = null;
lk_action1 = null;
}
if (href.indexOf('User_talk:XLinkBot/RevertList') > 0 && href.indexOf('§ion=') > 0 && lk_name1 != null && !ignore) {
orig_bracket = edit_lks[i].firstChild;
if (lk_name1 == 'add RL') {
addRequestLinks('add RL', href + '&fakesource=revertlist&fakeaction=' + BLHandler.rl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('add RefRL', href + '&fakesource=revertlist&fakeaction=' + BLHandler.rrl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('add BL', href + '&fakesource=revertlist&fakeaction=' + BLHandler.bl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('decline', href + '&fakesource=revertlist&fakeaction=' + BLHandler.bl_close_dec, orig_bracket, edit_lks[i]);
addRequestLinks('decline', href + '&fakesource=revertlist&fakeaction=' + BLHandler.bl_ublock_dec, orig_bracket, edit_lks[i]);
addRequestLinks('NR', href + '&fakesource=revertlist&fakeaction=' + BLHandler.bl_NR_dec, orig_bracket, edit_lks[i]);
addRequestLinks('stale', href + '&fakesource=revertlist&fakeaction=' + BLHandler.bl_stale_dec, orig_bracket, edit_lks[i]);
}
if (lk_name1 == 'rem RL') {
addRequestLinks('rem RL', href + '&fakesource=revertlist&fakeaction=' + BLHandler.rl_close_rem, orig_bracket, edit_lks[i]);
addRequestLinks('rem RefRL', href + '&fakesource=revertlist&fakeaction=' + BLHandler.rrl_close_rem, orig_bracket, edit_lks[i]);
addRequestLinks('bad faith', href + '&fakesource=revertlist&fakeaction=' + BLHandler.bl_BFR_dec, orig_bracket, edit_lks[i]);
addRequestLinks('decline', href + '&fakesource=revertlist&fakeaction=' + BLHandler.bl_close_dec, orig_bracket, edit_lks[i]);
addRequestLinks('NR', href + '&fakesource=revertlist&fakeaction=' + BLHandler.bl_NR_dec, orig_bracket, edit_lks[i]);
addRequestLinks('stale', href + '&fakesource=revertlist&fakeaction=' + BLHandler.bl_stale_dec, orig_bracket, edit_lks[i]);
}
}
}
}
} else if (conf.wgPageName === 'MediaWiki_talk:Spam-blacklist') {
// We're on [[MediaWiki_talk:Spam-blacklist]]
edit_lks = $('span.mw-editsection').toArray();
if (edit_lks.length === 0) {
return;
}
for (i = 0; i < edit_lks.length; i++) {
// Set to true if the addition or removal section is found
ignore = false;
// Find the A within:
anchors = edit_lks[i].getElementsByTagName('a');
if (anchors != null && anchors.length > 0) {
anchor = anchors[0];
href = anchor.getAttribute('href');
title = anchor.getAttribute('title');
if (title.indexOf('additions') > 0 ) {
ignore = true;
lk_name1 = 'add BL';
} else if (title.indexOf('removals') > 0) {
ignore = true;
lk_name1 = 'rem BL';
} else if (title.indexOf('Instructions') > 0) {
lk_name1 = null;
lk_action1 = null;
}
if (href.indexOf('MediaWiki_talk:Spam-blacklist') > 0 && href.indexOf('§ion=') > 0 && lk_name1 != null && !ignore) {
orig_bracket = edit_lks[i].firstChild;
if (lk_name1 == 'add BL') {
addRequestLinks('add BL', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('add RL', href + '&fakesource=blacklist&fakeaction=' + BLHandler.rl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('add RefRL', href + '&fakesource=blacklist&fakeaction=' + BLHandler.rrl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('defer meta', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_meta_add, orig_bracket, edit_lks[i]);
addRequestLinks('decline', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_close_dec, orig_bracket, edit_lks[i]);
addRequestLinks('user block', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_ublock_dec, orig_bracket, edit_lks[i]);
addRequestLinks('NR', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_NR_dec, orig_bracket, edit_lks[i]);
addRequestLinks('stale', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_stale_dec, orig_bracket, edit_lks[i]);
addRequestLinks('meta done', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_meta_done, orig_bracket, edit_lks[i]);
}
if (lk_name1 == 'rem BL') {
addRequestLinks('rem BL', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_close_rem, orig_bracket, edit_lks[i]);
addRequestLinks('deferwhite', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_deferwhite_dec, orig_bracket, edit_lks[i]);
addRequestLinks('defer meta', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_meta_rem, orig_bracket, edit_lks[i]);
addRequestLinks('decline', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_close_dec, orig_bracket, edit_lks[i]);
addRequestLinks('bad faith', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_BFR_dec, orig_bracket, edit_lks[i]);
addRequestLinks('NR', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_NR_dec, orig_bracket, edit_lks[i]);
addRequestLinks('stale', href + '&fakesource=blacklist&fakeaction=' + BLHandler.bl_stale_dec, orig_bracket, edit_lks[i]);
}
}
}
}
} else if (conf.wgPageName === 'Wikipedia_talk:WikiProject_Spam') {
// We're on [[Wikipedia_talk:WikiProject_Spam]]
edit_lks = $('span.mw-editsection').toArray();
if (edit_lks.length === 0) {
return;
}
for (i = 0; i < edit_lks.length; i++) {
// Set to true if the addition or removal section is found
ignore = false;
// Find the A within:
anchors = edit_lks[i].getElementsByTagName('a');
if (anchors != null && anchors.length > 0) {
anchor = anchors[0];
lk_name1 = 'add BL';
href = anchor.getAttribute('href');
title = anchor.getAttribute('title');
if (href.indexOf('Wikipedia_talk:WikiProject_Spam') > 0 && href.indexOf('§ion=') > 0 && lk_name1 != null && !ignore) {
orig_bracket = edit_lks[i].firstChild;
addRequestLinks('add BL', href + '&fakesource=wpspam&fakeaction=' + BLHandler.bl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('add RL', href + '&fakesource=wpspam&fakeaction=' + BLHandler.rl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('add RefRL', href + '&fakesource=wpspam&fakeaction=' + BLHandler.rrl_close_add, orig_bracket, edit_lks[i]);
addRequestLinks('defer meta', href + '&fakesource=wpspam&fakeaction=' + BLHandler.bl_meta_add, orig_bracket, edit_lks[i]);
addRequestLinks('user blocked', href + '&fakesource=wpspam&fakeaction=' + BLHandler.bl_ublock_dec, orig_bracket, edit_lks[i]);
addRequestLinks('meta done', href + '&fakesource=wpspam&fakeaction=' + BLHandler.bl_meta_done, orig_bracket, edit_lks[i]);
}
}
}
}
} else if (param != null) {
// We're on a request page
var summary = null;
action = null;
var $textbox = $( '#wpTextbox1' );
var text = $textbox.textSelection( 'getContents');
urls = [];
var i, m, url;
var append;
//Only do anything if we're editing a section.
if (document.getElementsByName('wpSection') == null) {
return;
}
// Get URLs
text = text.replace(/([Ll]ink[Ss]ummary[Ll]ive|[Ll]ink\s[Ss]ummary\s[Ll]ive)/g,'LinkSummary');
if (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/') {
url = conf.wgPageName.substr(33);
urls.push('\\b' + url.replace(/\./g, '\\.') + '\\b');
BLrequest = conf.wgPageName;
// Close report
if (param == BLHandler.rl_close_add || param == BLHandler.bl_close_add ) {
//FIXME: use regex?
text = text.replace("open}}", "added}}");
text = text.replace("Open}}", "added}}");
text = text.replace("stale}}", "added}}");
text = text.replace("Stale}}", "added}}");
text = text.replace("closed}}", "added}}");
text = text.replace("Closed}}", "added}}");
text = text.replace("close}}", "added}}");
text = text.replace("Close}}", "added}}");
} else if (param == BLHandler.bl_close_na || param == BLHandler.bl_close_rev || param == BLHandler.bl_meta_add || param == BLHandler.bl_meta_done) {
text = text.replace("open}}", "closed}}");
text = text.replace("Open}}", "closed}}");
text = text.replace("stale}}", "closed}}");
text = text.replace("Stale}}", "closed}}");
}
} else if (conf.wgPageName == 'User_talk:XLinkBot/RevertList') {
var reurl = /\{\{([Bb][Ll][Rr]equest[Rr]egex)\|(.*?)\}\}/g;
m = text.match(reurl);
if (m != null) {
for (i = 0; i < m.length; i++) {
url = m[i].substr(m[i].indexOf('|') + 1, m[i].length - m[i].indexOf('|') - 3); // Can't simply refer to the group
url = url.replace(/^regex\=/,'');
urls.push(url);
}
} else {
reurl = /\{\{([Bb][Ll][Rr]equest[Ll]ink)\|(.*?)\}\}/g;
m = text.match(reurl);
if (m != null) {
for (i = 0; i < m.length; i++) {
url = m[i].substr(m[i].indexOf('|') + 1, m[i].length - m[i].indexOf('|') - 3); // Can't simply refer to the group
url = url.replace(/^link\=/,'');
url = url.replace(/^http:\/\/\:/,'');
url = url.replace(/\s/g, '');
url = url.replace(/\&/g, '\\&');
url = url.replace(/\//g,'\\/');
url = url.replace(/\?/g,'\\?');
url = '\\b' + url.replace(/\./g, '\\.') + '\\b'
url = url.replace(/\\\/\\b/g,'\\/');
url = url.replace(/\$\\b/,'$');
urls.push(url);
}
} else {
reurl = /\{\{([Ll]ink[Ss]ummary|[Xx][Ww]iki[Ss]ummary|[Ll]ink[Ss]ummary[Ll]ive|[Xx][Ww]iki\s[Ss]ummary|[Ll]ink\s[Ss]ummary\s[Ll]ive|[Ll]ink[Tt]rack|[Ll]ink\s[Tt]rack|[Ll]ink\s[Ss]ummary|[Ss]pam[Ll]ink)\|(.*?)\}\}/g;
m = text.match(reurl);
if (m != null) {
for (i = 0; i < m.length; i++) {
url = m[i].substr(m[i].indexOf('|') + 1, m[i].length - m[i].indexOf('|') - 3); // Can't simply refer to the group
urls.push('\\b' + url.replace(/\./g, '\\.') + '\\b');
}
}
}
}
BLrequest = text.match(/^\=.*?\=$/m);
if (BLrequest && BLrequest.length > 0) {
BLrequest = BLrequest[0].substr(2, BLrequest[0].length - 4); // User_talk:XLinkBot/RevertList uses level 2 ('== sectionname ==')
BLrequest2 = BLrequest.match(/^\=.*?\=$/m);
if (BLrequest2 && BLrequest2.length > 0) {
BLrequest = BLrequest.substr(1, BLrequest.length - 2); // User_talk:XLinkBot/RevertList uses level 2 ('== sectionname ==')
}
if (BLrequest.substr(0,1) == ' ') {
BLrequest = BLrequest.substr(1, 256); // try to strip initial space
}
if (BLrequest.substr(0,1) == ' ') {
BLrequest = BLrequest.substr(1, 256); // try to strip initial space
}
if (BLrequest.substr(0,1) == ' ') {
BLrequest = BLrequest.substr(1, 256); // try to strip initial space
}
} else {
BLrequest = '';
}
if (urls === '' && BLrequest !== '') {
m = BLrequest.match(/(?:www\.|)[^\s]*?\.[a-zA-Z]{2,3}/g);
for (i = 0; i < m.length; i++) {
if (m[i].substr(0, 4) === 'www.') {
urls.push('\\b' + m[i].substr(4).replace(/\./g, '\\.') + '\\b');
} else {
urls.push('\\b' + m[i].replace(/\./g, '\\.') + '\\b');
}
}
}
} else if (conf.wgPageName == 'MediaWiki_talk:Spam-blacklist') {
var reurl = /\{\{([Bb][Ll][Rr]equest[Rr]egex)\|(.*?)\}\}/g;
m = text.match(reurl);
if (m != null) {
for (i = 0; i < m.length; i++) {
url = m[i].substr(m[i].indexOf('|') + 1, m[i].length - m[i].indexOf('|') - 3); // Can't simply refer to the group
url = url.replace(/^regex\=/,'');
urls.push(url);
}
} else {
reurl = /\{\{([Bb][Ll][Rr]equest[Ll]ink)\|(.*?)\}\}/g;
m = text.match(reurl);
if (m != null) {
for (i = 0; i < m.length; i++) {
url = m[i].substr(m[i].indexOf('|') + 1, m[i].length - m[i].indexOf('|') - 3); // Can't simply refer to the group
url = url.replace(/^link\=/,'');
url = url.replace(/^http:\/\/\:/,'');
url = url.replace(/\s/g, '');
url = url.replace(/\&/g, '\\&');
url = url.replace(/\//g,'\\/');
url = url.replace(/\?/g,'\\?');
url = '\\b' + url.replace(/\./g, '\\.') + '\\b'
url = url.replace(/\\\/\\b/g,'\\/');
url = url.replace(/\$\\b/,'$');
urls.push(url);
}
} else {
reurl = /\{\{([Ll]ink[Ss]ummary|[Xx][Ww]iki[Ss]ummary|[Ll]ink[Ss]ummary[Ll]ive|[Xx][Ww]iki\s[Ss]ummary|[Ll]ink\s[Ss]ummary\s[Ll]ive|[Ll]ink[Tt]rack|[Ll]ink\s[Tt]rack|[Ll]ink\s[Ss]ummary|[Ss]pam[Ll]ink)\|(.*?)\}\}/g;
m = text.match(reurl);
if (m != null) {
for (i = 0; i < m.length; i++) {
url = m[i].substr(m[i].indexOf('|') + 1, m[i].length - m[i].indexOf('|') - 3); // Can't simply refer to the group
urls.push('\\b' + url.replace(/\./g, '\\.') + '\\b');
}
}
}
}
BLrequest = text.match(/^\=.*?\=$/m);
if (BLrequest && BLrequest.length > 0) {
BLrequest = BLrequest[0].substr(2, BLrequest[0].length - 4); // MediaWiki_talk:Spam-blacklist uses level 2 ('== sectionname ==')
BLrequest2 = BLrequest.match(/^\=.*?\=$/m);
if (BLrequest2 && BLrequest2.length >0) {
BLrequest = BLrequest.substr(1, BLrequest.length - 2); // User_talk:XLinkBot/RevertList uses level 2 ('== sectionname ==')
}
if (BLrequest.substr(0,1) == ' ') {
BLrequest = BLrequest.substr(1, 256); // try to strip initial space
}
if (BLrequest.substr(0,1) == ' ') {
BLrequest = BLrequest.substr(1, 256); // try to strip initial space
}
if (BLrequest.substr(0,1) == ' ') {
BLrequest = BLrequest.substr(1, 256); // try to strip initial space
}
} else {
BLrequest = '';
}
if (urls === '' && BLrequest !== '') {
m = BLrequest.match(/(?:www\.|)[^\s]*?\.[a-zA-Z]{2,3}/g);
for (i = 0; i < m.length; i++) {
if (m[i].substr(0, 4) === 'www.') {
urls.push('\\b' + m[i].substr(4).replace(/\./g, '\\.') + '\\b');
} else {
urls.push('\\b' + m[i].replace(/\./g, '\\.') + '\\b');
}
}
}
} else if (conf.wgPageName == 'Wikipedia_talk:WikiProject_Spam') {
var reurl = /\{\{([Bb][Ll][Rr]equest[Rr]egex)\|(.*?)\}\}/g;
m = text.match(reurl);
if (m != null) {
for (i = 0; i < m.length; i++) {
url = m[i].substr(m[i].indexOf('|') + 1, m[i].length - m[i].indexOf('|') - 3); // Can't simply refer to the group
url = url.replace(/^regex\=/,'');
urls.push(url);
}
} else {
reurl = /\{\{([Bb][Ll][Rr]equest[Ll]ink)\|(.*?)\}\}/g;
m = text.match(reurl);
if (m != null) {
for (i = 0; i < m.length; i++) {
url = m[i].substr(m[i].indexOf('|') + 1, m[i].length - m[i].indexOf('|') - 3); // Can't simply refer to the group
url = url.replace(/^link\=/,'');
url = url.replace(/^http:\/\/\:/,'');
url = url.replace(/\s/g, '');
url = url.replace(/\&/g, '\\&');
url = url.replace(/\//g,'\\/');
url = url.replace(/\?/g,'\\?');
url = '\\b' + url.replace(/\./g, '\\.') + '\\b'
url = url.replace(/\\\/\\b/g,'\\/');
url = url.replace(/\$\\b/,'$');
urls.push(url);
}
} else {
reurl = /\{\{([Ll]ink[Ss]ummary|[Xx][Ww]iki[Ss]ummary|[Ll]ink[Ss]ummary[Ll]ive|[Xx][Ww]iki\s[Ss]ummary|[Ll]ink\s[Ss]ummary\s[Ll]ive|[Ll]ink[Tt]rack|[Ll]ink\s[Tt]rack|[Ll]ink\s[Ss]ummary|[Ss]pam[Ll]ink)\|(.*?)\}\}/g;
m = text.match(reurl);
if (m != null) {
for (i = 0; i < m.length; i++) {
url = m[i].substr(m[i].indexOf('|') + 1, m[i].length - m[i].indexOf('|') - 3); // Can't simply refer to the group
urls.push('\\b' + url.replace(/\./g, '\\.') + '\\b');
}
}
}
}
BLrequest = text.match(/^\=.*?\=$/m); ////// help BL
if (BLrequest && BLrequest.length > 0) { ////// help BL
BLrequest = BLrequest[0].substr(2, BLrequest[0].length - 4); // Wikipedia_talk:WikiProject_Spam uses level 2 ('== sectionname ==')
BLrequest2 = BLrequest.match(/^\=.*?\=$/m);
if (BLrequest2 && BLrequest2.length >0) {
BLrequest = BLrequest.substr(1, BLrequest.length - 2); // User_talk:XLinkBot/RevertList uses level 2 ('== sectionname ==')
}
if (BLrequest.substr(0,1) == ' ') {
BLrequest = BLrequest.substr(1, 256); // try to strip initial space
}
if (BLrequest.substr(0,1) == ' ') {
BLrequest = BLrequest.substr(1, 256); // try to strip initial space
}
if (BLrequest.substr(0,1) == ' ') {
BLrequest = BLrequest.substr(1, 256); // try to strip initial space
}
} else {
BLrequest = ''; ////// help BL
}
if (urls === '' && BLrequest !== '') {
m = BLrequest.match(/(?:www\.|)[^\s]*?\.[a-zA-Z]{2,3}/g); ////// help BL
for (i = 0; i < m.length; i++) {
if (m[i].substr(0, 4) === 'www.') {
urls.push('\\b' + m[i].substr(4).replace(/\./g, '\\.') + '\\b');
} else {
urls.push('\\b' + m[i].replace(/\./g, '\\.') + '\\b');
}
}
}
}
var copyWarn = document.getElementById('editpage-copywarn');
copyWarn.innerHTML = copyWarn.innerHTML + '<div style=\"border: 1px solid; margin: 5px; padding: 5px;\"><h3>BLHandler</h3>\n<div id=\"BLdebug\"></div>';
BLdebug = document.getElementById('BLdebug');
if (param == BLHandler.rl_close_add) {
summary = "Added to RevertList (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if (signeduser == null) {
append = (typeof BLHandlerAddComment !== 'undefined' ? BLHandlerAddComment : ':{{Added}} to [[User:XLinkBot/RevertList]]. --~~~~');
} else {
append = (typeof BLHandlerAddComment !== 'undefined' ? BLHandlerAddComment : ':{{rto|'+signeduser[1]+'}} {{Added}} to [[User:XLinkBot/RevertList]]. --~~~~');
}
action = BLHandler.rl_add;
} else if (param == BLHandler.rl_close_rem) {
summary = "Removed from RevertList (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if (signeduser == null) {
append = (typeof BLHandlerRemComment !== 'undefined' ? BLHandlerRemComment : ':{{Removed}} from [[User:XLinkBot/RevertList]]. --~~~~');
} else {
append = (typeof BLHandlerRemComment !== 'undefined' ? BLHandlerRemComment : ':{{rto|'+signeduser[1]+'}} {{Removed}} from [[User:XLinkBot/RevertList]]. --~~~~');
}
action = BLHandler.rl_rem;
} else if (param == BLHandler.rrl_close_add) {
summary = "Added to RevertReferencesList (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if (signeduser == null) {
append = (typeof BLHandlerAddComment !== 'undefined' ? BLHandlerAddComment : ':{{Added}} to [[User:XLinkBot/RevertReferencesList]]. --~~~~');
} else {
append = (typeof BLHandlerAddComment !== 'undefined' ? BLHandlerAddComment : ':{{rto|'+signeduser[1]+'}} {{Added}} to [[User:XLinkBot/RevertReferencesList]]. --~~~~');
}
action = BLHandler.rrl_add;
} else if (param == BLHandler.rrl_close_rem) {
summary = "Removed from RevertReferencesList (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if (signeduser == null) {
append = (typeof BLHandlerRemComment !== 'undefined' ? BLHandlerRemComment : ':{{Removed}} from [[User:XLinkBot/RevertReferencesList]]. --~~~~');
} else {
append = (typeof BLHandlerRemComment !== 'undefined' ? BLHandlerRemComment : ':{{rto|'+signeduser[1]+'}} {{Removed}} from [[User:XLinkBot/RevertReferencesList]]. --~~~~');
}
action = BLHandler.rrl_rem;
} else if (param == BLHandler.bl_stale_dec) {
summary = "Marked stale (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{Stale}}. --~~~~');
} else {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{rto|'+signeduser[1]+'}} {{Stale}}. --~~~~');
}
} else if (param == BLHandler.bl_meta_add) {
summary = "Defer to meta (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{Defermetablack}}, cross-wiki problem. --~~~~');
} else {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{rto|'+signeduser[1]+'}} {{Defermetablack}}, cross-wiki problem. --~~~~');
}
} else if (param == BLHandler.bl_meta_done) {
summary = "Handled on meta (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':Handled on meta. --~~~~');
} else {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{rto|'+signeduser[1]+'}} Handled on meta. --~~~~');
}
} else if (param == BLHandler.bl_meta_rem) {
summary = "Defer to meta (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':Not blacklisted locally, {{Defermetablack}} to request global removal, or {{Deferwhite}} to ask for local whitelisting of specific links. --~~~~');
} else {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{rto|'+signeduser[1]+'}} not blacklisted locally, {{Defermetablack}} to request global removal, or {{Deferwhite}} to ask for local whitelisting of specific links. --~~~~');
}
} else if (param == BLHandler.bl_NR_dec) {
summary = "No response (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{Stale}}, no response from requester. --~~~~');
} else {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{rto|'+signeduser[1]+'}} {{Stale}}, no response from requester. --~~~~');
}
} else if (param == BLHandler.bl_BFR_dec) {
summary = "Thrown out - bad faith request (using [[User:Beetstra/SBH|SBHandler]])";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{Thrown out}}, bad faith request. --~~~~');
} else {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{rto|'+signeduser[1]+'}} {{Thrown out}}, bad faith request. --~~~~');
}
} else if (param == BLHandler.rl_close_na) {
summary = "Closed using [[User:Beetstra/SBH|SBHandler]]";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{Close}}. --~~~~');
} else {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{rto|'+signeduser[1]+'}} {{Close}}. --~~~~');
}
} else if (param == BLHandler.rl_close_rev) {
summary = "Reverted using [[User:Beetstra/SBH|SBHandler]]";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{rto|'+signeduser[1]+'}} {{Reverted}}. --~~~~');
} else {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{Reverted}}. --~~~~');
}
} else if (param == BLHandler.rl_close_dec) {
summary = "Declined [Uu]sing [[User:Beetstra/SBH|SBHandler]]";
var matchregex = /\[\[user\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerDecComment !== 'undefined' ? BLHandlerDecComment : ':{{Declined}}. --~~~~');
} else {
append = (typeof BLHandlerDecComment !== 'undefined' ? BLHandlerDecComment : ':{{rto|'+signeduser[1]+'}} {{Declined}}. --~~~~');
}
} else if (param == BLHandler.bl_ublock_dec) {
summary = "Declined [Uu]sing [[User:Beetstra/SBH|SBHandler]] (user(s) blocked)";
var matchregex = /\[\[user\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerDecComment !== 'undefined' ? BLHandlerDecComment : ':{{Declined}}, user(s) blocked instead. --~~~~');
} else {
append = (typeof BLHandlerDecComment !== 'undefined' ? BLHandlerDecComment : ':{{rto|'+signeduser[1]+'}} {{Declined}}, user(s) blocked instead. --~~~~');
}
} else if (param == BLHandler.bl_close_add) {
summary = "Added to Blacklist using [[User:Beetstra/SBH|SBHandler]]";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerAddComment !== 'undefined' ? BLHandlerAddComment : ':{{Added}} to [[MediaWiki:Spam-blacklist]]. --~~~~');
} else {
append = (typeof BLHandlerAddComment !== 'undefined' ? BLHandlerAddComment : ':{{rto|'+signeduser[1]+'}} {{Added}} to [[MediaWiki:Spam-blacklist]]. --~~~~');
}
action = BLHandler.bl_add;
} else if (param == BLHandler.bl_close_rem) {
summary = "Removed from BlackList using [[User:Beetstra/SBH|SBHandler]]";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRemComment !== 'undefined' ? BLHandlerRemComment : ':{{Removed}} from [[MediaWiki:Spam-blacklist]]. --~~~~');
} else {
append = (typeof BLHandlerRemComment !== 'undefined' ? BLHandlerRemComment : ':{{rto|'+signeduser[1]+'}} {{Removed}} from [[MediaWiki:Spam-blacklist]]. --~~~~');
}
action = BLHandler.bl_rem;
} else if (param == BLHandler.bl_close_na) {
summary = "Closed using [[User:Beetstra/SBH|SBHandler]]";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerCloseComment !== 'undefined' ? BLHandlerCloseComment : ':{{Close}}. --~~~~');
} else {
append = (typeof BLHandlerCloseComment !== 'undefined' ? BLHandlerCloseComment : ':{{rto|'+signeduser[1]+'}} {{Close}}. --~~~~');
}
} else if (param == BLHandler.bl_close_rev) {
summary = "Reverted using [[User:Beetstra/SBH|SBHandler]]";
var signeduser = text.match(matchregex);
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{Reverted}}. --~~~~');
} else {
append = (typeof BLHandlerRevComment !== 'undefined' ? BLHandlerRevComment : ':{{rto|'+signeduser[1]+'}} {{Reverted}}. --~~~~');
}
} else if (param == BLHandler.bl_close_dec) {
summary = "Declined using [[User:Beetstra/SBH|SBHandler]]";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerDecComment !== 'undefined' ? BLHandlerDecComment : ':{{Declined}}. --~~~~');
} else {
append = (typeof BLHandlerDecComment !== 'undefined' ? BLHandlerDecComment : ':{{rto|'+signeduser[1]+'}} {{Declined}}. --~~~~');
}
} else if (param == BLHandler.bl_deferwhite_dec) {
summary = "Deferred to WhiteList using [[User:Beetstra/SBH|SBHandler]]";
var matchregex = /\[\[[Uu]ser\:(.*?)[\|\]]/;
var signeduser = text.match(matchregex);
if ((signeduser == null) | (conf.wgPageName.substr(0, 33) === 'Wikipedia:WikiProject_Spam/Local/')) {
append = (typeof BLHandlerDecComment !== 'undefined' ? BLHandlerDecComment : ':{{Declined}}, {{Deferwhite}} for specific links on this domain. --~~~~');
} else {
append = (typeof BLHandlerDecComment !== 'undefined' ? BLHandlerDecComment : ':{{rto|'+signeduser[1]+'}} {{Declined}}, {{Deferwhite}} for specific links on this domain. --~~~~');
}
}
if (summary != null) {
if (wpAction == 'edit') {
BLUtils.setEditSummary(summary);
var $textbox = $( '#wpTextbox1' );
mytext = $textbox.textSelection( 'getContents');
$textbox.textSelection( 'setContents', mytext+'\n'+append);
}
if (action != null && urls !== '') {
BLdebug.innerHTML += '<span style=\"font-weight:bold;\">Action: </span>' + action + ';<br />';
BLdebug.innerHTML += '<span style=\"font-weight:bold;\">Domains: </span>' + urls.join(', ') + ';<br />';
var editform = document.getElementById('editform');
editform.action += '&fakeaction=' + param + '&fakesource=' + fakesource;
// Remove save button
var wpSave = document.getElementById('wpSave');
wpSave.parentNode.removeChild(wpSave);
//Add save link:
wpSave = document.createElement('span');
wpSave.setAttribute('id', 'wpSave');
if (action == BLHandler.bl_rem) {
wpSave.innerHTML = '<a href=\"javascript:BLHandler.HandlerSaveRequest()\">Save and remove domains from blacklist</a> ';
} else if (action == BLHandler.bl_add) {
wpSave.innerHTML = '<a href=\"javascript:BLHandler.HandlerSaveRequest()\">Save and add domains to blacklist</a> ';
} else if (action == BLHandler.rl_rem) {
wpSave.innerHTML = '<a href=\"javascript:BLHandler.HandlerSaveRequest()\">Save and remove domains from revertlist</a> ';
} else if (action == BLHandler.rl_add) {
wpSave.innerHTML = '<a href=\"javascript:BLHandler.HandlerSaveRequest()\">Save and add domains to revertlist</a> ';
} else if (action == BLHandler.rrl_rem) {
wpSave.innerHTML = '<a href=\"javascript:BLHandler.HandlerSaveRequest()\">Save and remove domains from reverteferenceslist</a> ';
} else if (action == BLHandler.rrl_add) {
wpSave.innerHTML = '<a href=\"javascript:BLHandler.HandlerSaveRequest()\">Save and add domains to revertreferenceslist</a> ';
}
var wpPreview = document.getElementById('wpPreview');
wpPreview.parentNode.insertBefore(wpSave, wpPreview);
}
// Don't close the window to allow adding a comment.
if (text.scrollHeight > text.clientHeight) {
text.scrollTop = text.scrollHeight - text.clientHeight;
}
$textbox.textSelection( 'setContents', text+'\n'+append);
if(text)text.focus();
}
}
},
HandlerSaveRequest: function () {
BLdebug.innerHTML += '<span style=\"font-weight:bold;\">Saving request…</span><br />';
var summary = document.getElementById('wpSummary').value;
var $textbox = $( '#wpTextbox1' );
var text = $textbox.textSelection( 'getContents');
var section = document.getElementsByName('wpSection')[0].value;
var minor = document.getElementById('wpMinoredit');
if (minor.checked) {
minor = '&minor=1';
} else {
minor = '¬minor=1';
}
var watch = document.getElementById('wpWatchthis');
if (watch.checked) {
watch = '&watchlist=watch';
} else {
watch = '&watchlist=unwatch';
}
if (section !== '') {
section = '§ion=' + encodeURIComponent(section);
}
var edittoken = mw.user.tokens.get('csrfToken');
var query = 'format=xml';
var params = 'action=edit&title=' + encodeURIComponent(conf.wgPageName) + '&summary=' + encodeURIComponent(summary) + '&text=' + encodeURIComponent(text) + section + minor + watch + '&token=' + encodeURIComponent(edittoken);
BLHandler.BLpostRequest(query, BLHandler.BLsetLocation, params, true);
},
BLsetLocation: function (request) {
var xml = request.responseXML;
var location = conf.wgServer + conf.wgScriptPath + '/index.php' +
'?title=Special:SpamBlackList' +
'&action=' + action +
'&fakesource=' + fakesource +
'&urls=' + urls.join('|') +
'&request=' + BLrequest;
if (xml != null) {
var edits = xml.getElementsByTagName('edit');
if (edits.length === 0) {
BLdebug.innerHTML = '<div style=\"font-weight:bold;\">Saving might have failed. Please close the request yourself. ' +
'Use <a href="' + location +
'" title="Special:SpamBlackList">Special:SpamBlackList</a>' +
// ' to add/remove the domains to/from the revertlist.<br />Params:<br /><pre>' + params + '</pre><br />Response:<pre>' + request.responseText + '</pre></div>';
' to add/remove the domains to/from the Spam-blacklist.<br />Params:<br /><pre>' + params + '</pre><br />Response:<pre>' + request.responseText + '</pre></div>';
return;
}
var result = edits[0].getAttribute('result');
BLHandler.oldid = edits[0].getAttribute('newrevid');
if (result != 'Success') {
BLdebug.innerHTML = '<div style=\"font-weight:bold;\">Saving failed. Please close the request yourself. ' +
'Use <a href="' + location +
'" title="Special:SpamBlackList">Special:SpamBlackList</a>' +
// ' to add/remove the domains to/from the revertlist.<br />Params:<br /><pre>' + params + '</pre><br />Response:<pre>' + request.responseText + '</pre></div>';
' to add/remove the domains to/from the Spam-blacklist.<br />Params:<br /><pre>' + params + '</pre><br />Response:<pre>' + request.responseText + '</pre></div>';
return;
} else {
window.location = location;
}
} else {
BLdebug.innerHTML += '<div style=\"font-weight:bold;\">ERROR: ' + request.status + '<br /> Please close the request yourself. ' +
'Use <a href="' + location +
'" title="Special:SpamBlackList">Special:SpamBlackList</a>' +
// ' to add/remove the domains to/from the revertlist.<br />Params:<br /><pre>' + params + '</pre><br />Response:<pre>' + request.responseText + '</pre></div>';
' to add/remove the domains to/from the Spam-blacklist.<br />Params:<br /><pre>' + params + '</pre><br />Response:<pre>' + request.responseText + '</pre></div>';
return;
}
},
/*------------------------------------------------------------------------------------------
Add to revertlist or blacklist.
------------------------------------------------------------------------------------------*/
edittoken: '',
text: '',
request: '',
urls: '',
action: '',
timestamp: '',
oldid: '',
custom: false,
BLWrapper: function () {
BLHandler.action = BLUtils.getParamValue('action');
BLHandler.fakesource = BLUtils.getParamValue('fakesource');
BLHandler.urls = BLUtils.getParamValue('urls');
BLHandler.request = BLUtils.getParamValue('request');
if (BLHandler.request.substr(0,1) == ' ') {
BLHandler.request = BLHandler.request.substr(1, 256); // try to strip initial space
}
if (BLHandler.request.substr(0,1) == ' ') {
BLHandler.request = BLHandler.request.substr(1, 256); // try to strip initial space
}
if (BLHandler.request.substr(0,1) == ' ') {
BLHandler.request = BLHandler.request.substr(1, 256); // try to strip initial space
}
var header = document.getElementsByTagName('h1')[0];
var content = document.getElementById('bodyContent');
if (BLHandler.action == BLHandler.rl_add || BLHandler.action == BLHandler.rl_rem) {
document.title = 'User:XLinkBot/RevertList';
header.innerHTML = 'User:XLinkBot/RevertList';
content.innerHTML = '<h3 id=\"siteSub\">en.wikipedia blacklist tool.</h3>' +
'<p>Use this tool to add domains to the <a href=\"//en.wikipedia.org/wiki/User:XLinkBot/RevertList\" title=\"User:XLinkBot/RevertList\">User:XLinkBot/RevertList</a>, or remove them, and log the change. Note that it does not escape paths. <span style=\"font-weight:bold;\">Do not use this tool unless you have a basic understanding of regex.</span> You still need to confirm the changes. Do not assume that the proposed edit is correct.</p>';
} else if (BLHandler.action == BLHandler.bl_add || BLHandler.action == BLHandler.bl_rem) {
document.title = 'MediaWiki:Spam-blacklist';
header.innerHTML = 'MediaWiki:Spam-blacklist';
content.innerHTML = '<h3 id=\"siteSub\">en.wikipedia blacklist tool.</h3>' +
'<p>Use this tool to add domains to the <a href=\"//en.wikipedia.org/wiki/MediaWiki:Spam-blacklist\" title=\"MediaWiki:Spam-blacklist\">MediaWiki:Spam-blacklist</a>, or remove them, and log the change. Note that it does not escape paths. <span style=\"font-weight:bold;\">Do not use this tool unless you have a basic understanding of regex.</span> You still need to confirm the changes. Do not assume that the proposed edit is correct.</p>';
} else if (BLHandler.action == BLHandler.rrl_add || BLHandler.action == BLHandler.rrl_rem) {
document.title = 'User:XLinkBot/RevertReferencesList';
header.innerHTML = 'User:XLinkBot/RevertReferencesList';
content.innerHTML = '<h3 id=\"siteSub\">en.wikipedia blacklist tool.</h3>' +
'<p>Use this tool to add domains to the <a href=\"//en.wikipedia.org/wiki/User:XLinkBot/RevertReferencesList\" title=\"User:XLinkBot/RevertReverencesList\">User:XLinkBot/RevertReferencesList</a>, or remove them, and log the change. Note that it does not escape paths. <span style=\"font-weight:bold;\">Do not use this tool unless you have a basic understanding of regex.</span> You still need to confirm the changes. Do not assume that the proposed edit is correct.</p>';
}
if ((BLHandler.action == BLHandler.bl_add || BLHandler.action == BLHandler.bl_rem) && BLHandler.urls != null && BLHandler.urls !== '' && BLHandler.request != null) {
content.innerHTML += '<div id=\"RLstatus\" style=\"font-style: italic; border: 1px solid; padding: 5px; float:right;\">' +
'<span id=\"Sthrobber\" style=\"text-align:center; font-weight:bold; float:right;\">' +
'<img src=\"//upload.wikimedia.org/wikipedia/commons/d/d2/Spinning_wheel_throbber.gif\" alt=\"Loading\">' +
'Loading…</span>' +
'<br clear=\"all\" />' +
'<table><tr style=\"vertical-align:top;\"><td>' +
'<h5>BlackList</h5>' +
'<ul><li id=\"SgetRL\" style=\"color:grey;\">Get BlackList text</li>' +
'<li id=\"SaddRL\" style=\"color:grey;\">Add/remove domains</li>' +
'<li id=\"SgetC\" style=\"color:grey;\">Get changes from server</li>' +
'<li id=\"SparseRL\" style=\"color:grey;\">Parse and show changes</li>' +
'<li id=\"SconfirmRL\" style=\"color:grey;\">Confirm changes</li>' +
'<li id=\"SsaveRL\" style=\"color:grey;\">Save changes</li></ul></td><td>' +
'<h5>Log</h5>' +
'<ul><li id=\"SgetL\" style=\"color:grey;\">Get log text</li>' +
'<li id=\"SaddL\" style=\"color:grey;\">Add/remove domains</li>' +
'<li id=\"SsaveL\" style=\"color:grey;\">Save changes</li>' +
'</ul></tr></table></div><br clear=\"all\" />' +
'<h3>RevertList</h3><div id=\"RLlist\"></div>' +
'<h3>Log</h3><div id=\"RLlog\"></div>';
BLlist = document.getElementById("RLlist");
BLlog = document.getElementById("RLlog");
edittoken = mw.user.tokens.get('csrfToken');
BLHandler.BLgetRequest('action=query&prop=info&titles=MediaWiki:Spam-blacklist&token=' + encodeURIComponent(edittoken), BLHandler.BLgetRL, true);
} else if ((BLHandler.action == BLHandler.rl_add || BLHandler.action == BLHandler.rl_rem) && BLHandler.urls != null && BLHandler.urls !== '' && BLHandler.request != null) {
content.innerHTML += '<div id=\"RLstatus\" style=\"font-style: italic; border: 1px solid; padding: 5px; float:right;\">' +
'<span id=\"Sthrobber\" style=\"text-align:center; font-weight:bold; float:right;\">' +
'<img src=\"//upload.wikimedia.org/wikipedia/commons/d/d2/Spinning_wheel_throbber.gif\" alt=\"Loading\">' +
'Loading…</span>' +
'<br clear=\"all\" />' +
'<table><tr style=\"vertical-align:top;\"><td>' +
'<h5>RevertList</h5>' +
'<ul><li id=\"SgetRL\" style=\"color:grey;\">Get RevertList text</li>' +
'<li id=\"SaddRL\" style=\"color:grey;\">Add/remove domains</li>' +
'<li id=\"SgetC\" style=\"color:grey;\">Get changes from server</li>' +
'<li id=\"SparseRL\" style=\"color:grey;\">Parse and show changes</li>' +
'<li id=\"SconfirmRL\" style=\"color:grey;\">Confirm changes</li>' +
'<li id=\"SsaveRL\" style=\"color:grey;\">Save changes</li></ul></td><td>' +
'<h5>Log</h5>' +
'<ul><li id=\"SgetL\" style=\"color:grey;\">Get log text</li>' +
'<li id=\"SaddL\" style=\"color:grey;\">Add/remove domains</li>' +
'<li id=\"SsaveL\" style=\"color:grey;\">Save changes</li>' +
'</ul></tr></table></div><br clear=\"all\" />' +
'<h3>RevertList</h3><div id=\"RLlist\"></div>' +
'<h3>Log</h3><div id=\"RLlog\"></div>';
BLlist = document.getElementById("RLlist");
BLlog = document.getElementById("RLlog");
edittoken = mw.user.tokens.get('csrfToken');
BLHandler.BLgetRequest('action=query&prop=info&titles=User:XLinkBot/RevertList&token=' + encodeURIComponent(edittoken), BLHandler.BLgetRL, true);
} else if ((BLHandler.action == BLHandler.rrl_add || BLHandler.action == BLHandler.rrl_rem) && BLHandler.urls != null && BLHandler.urls !== '' && BLHandler.request != null) {
content.innerHTML += '<div id=\"RLstatus\" style=\"font-style: italic; border: 1px solid; padding: 5px; float:right;\">' +
'<span id=\"Sthrobber\" style=\"text-align:center; font-weight:bold; float:right;\">' +
'<img src=\"//upload.wikimedia.org/wikipedia/commons/d/d2/Spinning_wheel_throbber.gif\" alt=\"Loading\">' +
'Loading…</span>' +
'<br clear=\"all\" />' +
'<table><tr style=\"vertical-align:top;\"><td>' +
'<h5>RevertList</h5>' +
'<ul><li id=\"SgetRL\" style=\"color:grey;\">Get RevertReferencesList text</li>' +
'<li id=\"SaddRL\" style=\"color:grey;\">Add/remove domains</li>' +
'<li id=\"SgetC\" style=\"color:grey;\">Get changes from server</li>' +
'<li id=\"SparseRL\" style=\"color:grey;\">Parse and show changes</li>' +
'<li id=\"SconfirmRL\" style=\"color:grey;\">Confirm changes</li>' +
'<li id=\"SsaveRL\" style=\"color:grey;\">Save changes</li></ul></td><td>' +
'<h5>Log</h5>' +
'<ul><li id=\"SgetL\" style=\"color:grey;\">Get log text</li>' +
'<li id=\"SaddL\" style=\"color:grey;\">Add/remove domains</li>' +
'<li id=\"SsaveL\" style=\"color:grey;\">Save changes</li>' +
'</ul></tr></table></div><br clear=\"all\" />' +
'<h3>RevertList</h3><div id=\"RLlist\"></div>' +
'<h3>Log</h3><div id=\"RLlog\"></div>';
BLlist = document.getElementById("RLlist");
BLlog = document.getElementById("RLlog");
edittoken = mw.user.tokens.get('csrfToken');
BLHandler.BLgetRequest('action=query&prop=info&titles=User:XLinkBot/RevertReferencesList&token=' + encodeURIComponent(edittoken), BLHandler.BLgetRL, true);
} else {
content.innerHTML += '<p style=\"font-style:italic\">This tool can only be used in conjunction with <a href=\"//en.wikipedia.org/wiki/Wikipedia:WikiProject_Spam/Local/\" title=\"Wikipedia:WikiProject_Spam/Local/\">COIBot\'s spam reports</a> to add or remove domains.</p>';
}
},
// Get the current text and oldid of [[User:XLinkBot/RevertList]] or of [[MediaWiki:Spam-blacklist]]
BLgetRL: function (request) {
var xml = request.responseXML;
if (xml != null) {
var pages = xml.getElementsByTagName('page');
BLHandler.edittoken = mw.user.tokens.get('csrfToken');
if (BLHandler.action == BLHandler.rl_add || BLHandler.action == BLHandler.rl_rem) {
BLHandler.BLgetRequest('action=query&prop=revisions&titles=User:XLinkBot/RevertList&rvprop=ids|timestamp|user|comment|content', BLHandler.BLparseRL, true);
} else if (BLHandler.action == BLHandler.rrl_add || BLHandler.action == BLHandler.rrl_rem) {
BLHandler.BLgetRequest('action=query&prop=revisions&titles=User:XLinkBot/RevertReferencesList&rvprop=ids|timestamp|user|comment|content', BLHandler.BLparseRL, true);
} else if (BLHandler.action == BLHandler.bl_add || BLHandler.action == BLHandler.bl_rem) {
BLHandler.BLgetRequest('action=query&prop=revisions&titles=MediaWiki:Spam-blacklist&rvprop=ids|timestamp|user|comment|content', BLHandler.BLparseRL, true);
}
}
},
// Add/remove domains from the text
BLparseRL: function (request) {
var xml = request.responseXML;
if (xml == null) {
BLlist.innerHTML += '<div style=\"font-weight:bold;\">ERROR: ' + request.status + '<br />Aborting.</div>';
return;
}
var revs = xml.getElementsByTagName('rev');
BLHandler.timestamp = revs[0].getAttribute('timestamp');
BLHandler.text = revs[0].textContent;
var oldlength = BLHandler.text.length;
document.getElementById('SgetRL').style.color = 'black';
if ((BLHandler.action == BLHandler.rl_add) || (BLHandler.action == BLHandler.rrl_add) || (BLHandler.action == BLHandler.bl_add)) {
urls = BLHandler.urls.replace(/\|/g, '\n');
if (BLHandler.text.length > 1000) {
var lastchars = BLHandler.text.substr(-1000);
BLHandler.text = BLHandler.text.substr(0, BLHandler.text.length - 1000);
if (lastchars.indexOf('## blhandler_end') > 0) {
lastchars = lastchars.replace('## blhandler_end', urls + '\n## blhandler_end');
} else {
BLlist.innerHTML += '<div style=\"font-weight:bold;\">ERROR: Could not find marker. Aborting.</div>';
return;
}
BLHandler.text += lastchars;
} else {
if (BLHandler.text.indexOf('## blhandler_end') > 0) {
BLHandler.text = BLHandler.text.replace('## blhandler_end', urls + '\n## blhandler_end');
} else {
BLlist.innerHTML += '<div style=\"font-weight:bold;\">ERROR: Could not find marker. Please add \"## blhandler_end\" on a single line below the blacklist\'s entry\'s and try again.</div>';
return;
}
}
} else if ((BLHandler.action == BLHandler.rl_rem) || (BLHandler.action == BLHandler.rrl_rem) || (BLHandler.action == BLHandler.bl_rem)) {
urls = BLHandler.urls.split('|');
for (var i = 0; i < urls.length; i++) {
BLHandler.text = BLHandler.text.replace(urls[i] + '\n', '');
}
}
//Check if the length changed, if not assume nothing changed.
if (oldlength == BLHandler.text.length) {
BLlist.innerHTML += '<div style=\"font-weight:bold;\">ERROR: The length of the old and new text are the same. This shouldn\'t happen. Aborting.</div>';
return;
}
document.getElementById('SaddRL').style.color = 'black';
if (BLHandler.action === BLHandler.rl_add || BLHandler.action === BLHandler.rl_rem) {
params = 'action=query&prop=revisions&titles=User:XLinkBot/RevertList&rvdifftotext=' + encodeURIComponent(BLHandler.text);
} else if (BLHandler.action === BLHandler.rrl_add || BLHandler.action === BLHandler.rrl_rem) {
params = 'action=query&prop=revisions&titles=User:XLinkBot/RevertReferencesList&rvdifftotext=' + encodeURIComponent(BLHandler.text);
} else if (BLHandler.action === BLHandler.bl_add || BLHandler.action === BLHandler.bl_rem) {
params = 'action=query&prop=revisions&titles=MediaWiki:Spam-blacklist&rvdifftotext=' + encodeURIComponent(BLHandler.text);
}
BLHandler.BLpostRequest('format=xml', BLHandler.HandlerParseDiff, params, true);
},
// Parse and show the proposed edit
HandlerParseDiff: function (request) {
var xml = request.responseXML;
if (xml != null) {
document.getElementById('SgetC').style.color = 'black';
var diffSource = xml.getElementsByTagName('diff');
var summary;
if (diffSource[0].childNodes[0].nodeValue) {
urls = BLHandler.urls.split('|');
if ((BLHandler.action == BLHandler.rl_add) || (BLHandler.action == BLHandler.rrl_add) || (BLHandler.action == BLHandler.bl_add)) {
summary = 'Adding ';
} else {
summary = 'Removing ';
}
if (urls.length > 1) {
summary += urls.length + ' domains ';
} else {
summary += urls[0] + ' ';
}
if (BLHandler.fakesource === 'localreport') {
summary += 'per [[' + BLHandler.request + ']].';
} else if (BLHandler.fakesource === 'revertlist') {
summary += 'per [[User talk:XLinkBot/RevertList#' + BLHandler.request + ']].';
} else if (BLHandler.fakesource === 'blacklist') {
summary += 'per [[MediaWiki talk:Spam-blacklist#' + BLHandler.request + ']].';
} else if (BLHandler.fakesource === 'wpspam') {
summary += 'per [[Wikipedia talk:WikiProject Spam#' + BLHandler.request + ']].';
}
BLlist.innerHTML += '<div id="wikiDiff"><table class="diff"><col class="diff-marker" /><col class="diff-content" /><col class="diff-marker" /><col class="diff-content" /><tr valign="top"><td colspan="2" class="diff-otitle">Current revision</td><td colspan="2" class="diff-ntitle">Your text</td></tr>' +
diffSource[0].childNodes[0].nodeValue + '</table></div>' +
'<br /><div id=\"BLform\">' +
'<input type=\"text\" value=\"' + summary + '\" id=\"summary\" maxlength=\"200\" size=\"60\" > <button onclick=\"BLHandler.HandlerSubmitEdit()\">Confirm changes</button><button onclick=\"BLHandler.HandlerEditList()\">Edit changes</button></div>';
document.getElementById('SparseRL').style.color = 'black';
} else {
BLlist.innerHTML += '<div style=\"font-weight:bold;\">ERROR: Could not show diff.<br />Aborting.</div>';
return;
}
} else {
BLlist.innerHTML += '<div style=\"font-weight:bold;\">ERROR: ' + request.status + '<br />Aborting.</div>';
return;
}
},
// Add a text area to change the revertlist or the blacklist yourself
HandlerEditList: function () {
var BLform = document.getElementById('BLform');
BLform.innerHTML = '<textarea name=\"wpTextbox1\" id=\"wpTextbox1\" cols=\"80\" rows=\"25\" accesskey=\",\">' +
BLHandler.text +
'</textarea>' +
BLform.innerHTML;
},
// Submit the edit to [[User:XLinkBot/RevertList]] or [[MediaWiki:Spam-blacklist]]
HandlerSubmitEdit: function () {
var wpTextbox = document.getElementById('wpTextbox1');
if (wpTextbox != null) {
BLHandler.text = wpTextbox.value;
BLHandler.custom = true; //We can't simply log the change. User needs to do that.
}
document.getElementById('SconfirmRL').style.color = 'black';
summary = document.getElementById('summary').value;
summary += ' Using [[User:Beetstra/SBH|BlackList/ReverList Handler]].';
var query = 'format=xml';
if (BLHandler.action == BLHandler.rl_add || BLHandler.action == BLHandler.rl_rem) {
params = 'action=edit&title=User:XLinkBot/RevertList&summary=' + encodeURIComponent(summary) + '&text=' + encodeURIComponent(BLHandler.text) + '&basetimestamp=' + BLHandler.timestamp + '&token=' + encodeURIComponent(BLHandler.edittoken);
} else if (BLHandler.action == BLHandler.rrl_add || BLHandler.action == BLHandler.rrl_rem) {
params = 'action=edit&title=User:XLinkBot/RevertReferencesList&summary=' + encodeURIComponent(summary) + '&text=' + encodeURIComponent(BLHandler.text) + '&basetimestamp=' + BLHandler.timestamp + '&token=' + encodeURIComponent(BLHandler.edittoken);
} else if (BLHandler.action == BLHandler.bl_add || BLHandler.action == BLHandler.bl_rem) {
params = 'action=edit&title=MediaWiki:Spam-blacklist&summary=' + encodeURIComponent(summary) + '&text=' + encodeURIComponent(BLHandler.text) + '&basetimestamp=' + BLHandler.timestamp + '&token=' + encodeURIComponent(BLHandler.edittoken);
}
BLHandler.BLpostRequest(query, BLHandler.BLLWrapper, params, true);
},
// Start logging procedure
BLLWrapper: function (request) {
var xml = request.responseXML;
if (xml != null) {
var edits = xml.getElementsByTagName('edit');
if (edits.length === 0) {
BLlist.innerHTML = '<div style=\"font-weight:bold;\">Saving might have failed. Please check if it succeeded and log the edit yourself if necessary.</div>';
return;
}
var result = edits[0].getAttribute('result');
BLHandler.oldid = edits[0].getAttribute('newrevid');
if (result !== 'Success') {
if (BLHandler.action == BLHandler.rl_add || BLHandler.action == BLHandler.rl_rem) {
BLlist.innerHTML = '<div style=\"font-weight:bold;\">Saving failed. Please revertlist the domains yourself.</div>';
} else if (BLHandler.action == BLHandler.rrl_add || BLHandler.action == BLHandler.rrl_rem) {
BLlist.innerHTML = '<div style=\"font-weight:bold;\">Saving failed. Please revertreferenceslist the domains yourself.</div>';
} else if (BLHandler.action == BLHandler.bl_add || BLHandler.action == BLHandler.bl_rem) {
BLlist.innerHTML = '<div style=\"font-weight:bold;\">Saving failed. Please blacklist the domains yourself.</div>';
}
return;
} else {
document.getElementById('SsaveRL').style.color = 'black';
if (BLHandler.action == BLHandler.rl_add || BLHandler.action == BLHandler.rl_rem) {
BLlist.innerHTML = '<div>RevertList has been updated, <a href=\"' + conf.wgServer + conf.wgScriptPath + '/index.php?oldid=' + BLHandler.oldid + '&diff=prev\" title=\"diff\">diff</a>.</div>';
} else if (BLHandler.action == BLHandler.rrl_add || BLHandler.action == BLHandler.rrl_rem) {
BLlist.innerHTML = '<div>RevertReferencesList has been updated, <a href=\"' + conf.wgServer + conf.wgScriptPath + '/index.php?oldid=' + BLHandler.oldid + '&diff=prev\" title=\"diff\">diff</a>.</div>';
} else if (BLHandler.action == BLHandler.bl_add || BLHandler.action == BLHandler.bl_rem) {
BLlist.innerHTML = '<div>Blacklist has been updated, <a href=\"' + conf.wgServer + conf.wgScriptPath + '/index.php?oldid=' + BLHandler.oldid + '&diff=prev\" title=\"diff\">diff</a>.</div>';
}
}
} else {
BLlist.innerHTML += '<div style=\"font-weight:bold;\">ERROR: ' + request.status + '<br />Aborting.</div>';
return;
}
var d = new Date();
var m = d.getMonth() + 1;
if (m < 10) {
m = '0' + m;
}
var y = d.getFullYear();
if (BLHandler.action == BLHandler.rl_add || BLHandler.action == BLHandler.rl_rem) {
logtitle = 'User:XLinkBot/RevertList_requests/log' ;
} else if (BLHandler.action == BLHandler.rrl_add || BLHandler.action == BLHandler.rrl_rem) {
logtitle = 'User:XLinkBot/RevertList_requests/log' ;
} else if (BLHandler.action == BLHandler.bl_add || BLHandler.action == BLHandler.bl_rem) {
logtitle = 'MediaWiki_talk:Spam-blacklist/log/'+ y;
}
if (BLHandler.fakesource === 'localreport') {
BLHandler.BLgetRequest('action=query&prop=revisions&titles=' + logtitle + '&rvprop=ids|timestamp|user|comment|content', BLHandler.BLparseL, true);
} else if (BLHandler.fakesource === 'revertlist') {
BLHandler.BLgetRequest('action=query&prop=revisions&titles=User_talk:XLinkBot/RevertList&rvprop=ids|timestamp|user|comment|content', BLHandler.BLparseTRL, true);
} else if (BLHandler.fakesource === 'blacklist') {
BLHandler.BLgetRequest('action=query&prop=revisions&titles=MediaWiki_talk:Spam-blacklist&rvprop=ids|timestamp|user|comment|content', BLHandler.BLparseTRL, true);
} else if (BLHandler.fakesource === 'wpspam') {
BLHandler.BLgetRequest('action=query&prop=revisions&titles=Wikipedia_talk:WikiProject_Spam&rvprop=ids|timestamp|user|comment|content', BLHandler.BLparseTRL, true);
}
},
// Get current oldid of [[User_talk:XLinkBot/RevertList]], because that's the location of the request.
BLparseTRL: function (request) {
var xml = request.responseXML;
if (xml != null) {
var revs = xml.getElementsByTagName('rev');
tprevid = revs[0].getAttribute('revid');
} else {
BLlog.innerHTML += '<div style=\"font-weight:bold;\">ERROR: ' + request.status + '<br />. Please log the edit yourself.</div>';
return;
}
BLHandler.BLgetRequest('action=query&prop=revisions&titles=' + logtitle + '&rvprop=ids|timestamp|user|comment|content', BLHandler.BLparseL, true);
},
// Add/remove domains to/from log
BLparseL: function (request) {
var xml = request.responseXML;
if (xml != null) {
document.getElementById('SgetL').style.color = 'black';
var revs = xml.getElementsByTagName('rev');
if (revs.length === 0) {
BLlog.innerHTML += '<div style=\"font-weight:bold;\">ERROR: Could not get log.<br /> It probably does not exist yet. Please create <a href="//en.wikipedia.org/wiki/' + logtitle + '" title="' + logtitle + '">' + logtitle + '</a> and log the edit yourself.</div>';
return;
}
BLHandler.timestamp = revs[0].getAttribute('timestamp');
BLHandler.text = revs[0].textContent;
} else {
BLlog.innerHTML += '<div style=\"font-weight:bold;\">ERROR: ' + request.status + '<br /> Please log the edit yourself.</div>';
return;
}
var rldiff;
if ((BLHandler.action == BLHandler.rl_add) || (BLHandler.action == BLHandler.rrl_add) || (BLHandler.action == BLHandler.bl_add)) {
rldiff = '{{bl-diff|' + BLHandler.oldid + '}}';
} else {
rldiff = '{{bl-diff|' + BLHandler.oldid + '|removal}}';
}
urls = BLHandler.urls.split('|');
var r = BLHandler.request;
if (BLHandler.fakesource === 'localreport') {
r = '[[' + r + ']]';
} else if (BLHandler.fakesource === 'revertlist') {
r = '{{XLinkBot-log|' + tprevid + '#{{subst:anchorencode:' + r + '}}}}';
} else if (BLHandler.fakesource === 'blacklist') {
r = '{{bl-log|' + tprevid + '#{{subst:anchorencode:' + r + '}}}}';
} else if (BLHandler.fakesource === 'wpspam') {
r = '{{wpspam-log|' + tprevid + '#{{subst:anchorencode:' + r + '}}}}';
}
var spaces = ' ';
if (urls.length == 1) {
log_text = ' ' + urls[0] + spaces.substr(0, 39 - urls[0].length) + '# ' +
conf.wgUserName + ' # ' + rldiff + '; see ' + r;
} else {
log_text = ' #: ' +
conf.wgUserName + ' # ' + rldiff + '; see ' + r;
for (var i = 0; i < urls.length; i++) {
log_text += '\n ' + urls[i];
}
}
// User needs to confirm log edit
if (BLHandler.custom) {
BLlog.innerHTML += '<p>The following text will be added to the log. You need to update this to reflect the changes you made to the proposed edit.</p>' +
'<textarea name=\"wpTextbox1\" id=\"wpTextbox1\" cols=\"80\" rows=\"10\" accesskey=\",\">' +
log_text +
'</textarea>' +
'<button onclick=\"BLHandler.BLsubmitL()\">Confirm changes</button>';
} else {
BLHandler.BLsubmitL();
}
},
BLsubmitL: function () {
var wpTextbox = document.getElementById('wpTextbox1');
if (wpTextbox != null) {
BLHandler.text += '\n' + wpTextbox.value;
} else {
BLHandler.text += '\n' + log_text;
}
document.getElementById('SaddL').style.color = 'black';
var query = 'format=xml';
var params = 'action=edit&title=' + encodeURIComponent(logtitle) + '&summary=' + encodeURIComponent(summary) + '&text=' + encodeURIComponent(BLHandler.text) + '&token=' + encodeURIComponent(BLHandler.edittoken);
BLHandler.BLpostRequest(query, BLHandler.BLLEnd, params, true);
},
// Confirm results
BLLEnd: function (request) {
var xml = request.responseXML;
if (xml != null) {
var edits = xml.getElementsByTagName('edit');
if (edits.length === 0) {
BLlist.innerHTML = '<div style=\"font-weight:bold;\">Saving might have failed. Please check if it succeeded and log the edit yourself if necessary.</div>';
return;
}
var result = edits[0].getAttribute('result');
var oldid = edits[0].getAttribute('newrevid');
if (result !== 'Success') {
BLlog.innerHTML = '<div>Saving failed. Please log the edit yourself.</div>';
return;
} else {
document.getElementById('SsaveL').style.color = 'black';
document.getElementById('Sthrobber').innerHTML = '';
if ((BLHandler.action == BLHandler.rl_add) || (BLHandler.action == BLHandler.rl_add)) {
BLlog.innerHTML = '<div>Log has been updated, <a href=\"' + conf.wgServer + conf.wgScriptPath + '/index.php?oldid=' + oldid + '&diff=prev\" title=\"diff\">diff</a>.<p style=\"font-style:italic\">Thanks for helping with the Spam revertlist!</p></div>';
} else if ((BLHandler.action == BLHandler.rrl_add) || (BLHandler.action == BLHandler.rrl_add)) {
BLlog.innerHTML = '<div>Log has been updated, <a href=\"' + conf.wgServer + conf.wgScriptPath + '/index.php?oldid=' + oldid + '&diff=prev\" title=\"diff\">diff</a>.<p style=\"font-style:italic\">Thanks for helping with the Spam revertlist!</p></div>';
} else {
BLlog.innerHTML = '<div>Log has been updated, <a href=\"' + conf.wgServer + conf.wgScriptPath + '/index.php?oldid=' + oldid + '&diff=prev\" title=\"diff\">diff</a>.<p style=\"font-style:italic\">Thanks for helping with the Spam blacklist!.</p></div>';
}
}
}
},
BLgetRequest: function (query, callback, api) {
var url;
if (api) {
url = conf.wgServer + conf.wgScriptPath + '/api.php?format=xml&' + query;
} else {
url = conf.wgServer + conf.wgScriptPath + '/index.php?' + query;
}
$.ajax({
url: url,
type: 'GET',
headers: {
'Pragma': 'cache=yes',
'Cache-Control': 'no-transform'
}
}).done(function (data, textStatus, jqXHR) {
callback(jqXHR);
});
},
BLpostRequest: function (query, callback, params, api) {
var url;
if (api) {
url = conf.wgServer + conf.wgScriptPath + '/api.php?' + query;
} else {
url = conf.wgServer + conf.wgScriptPath + '/index.php?' + query;
}
$.ajax({
url: url,
type: 'POST',
headers: {
'Content-type': 'application/x-www-form-urlencoded',
'Content-length': params.length,
'Pragma': 'cache=yes',
'Cache-Control': 'no-transform'
},
data: params
}).done(function (data, textStatus, jqXHR) {
callback(jqXHR);
});
},
BLsetupHandler: function () {
if (conf.wgPageName == 'Special:SpamBlackList') {
BLHandler.BLWrapper();
} else {
BLHandler.BLcloseRequestLinks();
}
}
};
// End of BLHandler object
$(BLHandler.BLsetupHandler);
}
// End of if-sysop check
// Export global variables
window.BLHandler = BLHandler;
window.BLrequest = BLrequest;
}());
// </nowiki>
// [[Category:Wikipedia scripts|BLHandler.js]]