# மீடியாவிக்கி:Group-sysop.js

/* Any JavaScript here will be loaded for sysops only */
/** Creates a button to invert checkboxes on Special:Undelete */
if (mw.config.get('wgCanonicalNamespace') == "Special" && mw.config.get('wgCanonicalSpecialPageName') == "Undelete") {
(function {
var form = document.forms["undelete"];
if (!form) {
return;
}
var elements = form.elements;
var submitButton = elements["mw-undelete-submit"];
if (!submitButton) {
return;
}
var toggleButton = document.createElement("input");
toggleButton.type = "button";
toggleButton.value = "Invert selection";  
toggleButton.onclick = function {
for (var i = 0; i < elements.length; ++i) {
var input = elements[i];
if (input.type != "checkbox") {
continue;
}
input.checked = !input.checked;
}
};
submitButton.parentNode.insertBefore(toggleButton, submitButton);
});
}  
/** Clean CSD G10 deletion summaries ******************************************
-
- Description: Replaces autogenerated deletion summaries for articles tagged
- for speedy deletion as attack pages (CSD G10) with a neutral
- summary that avoids including any part of the article content
- in the deletion log.
- Maintainers: User:Ilmari Karonen
- /
if (mw.config.get('wgAction') == "delete") {
(function {
var wpReason = document.getElementById("wpReason");
if (!wpReason)
return;
var regexp = /\{\{\s*(msg:\s*)?(template:\s*)?(db-a(p|tk)?|((csd|db)[-:])?(a6|attack(pages?|template)?|g10))\s*[|}]/i;
if (regexp.test(wpReason.value))
wpReason.value = "CSD G10: ";
});
}
/*
- Note: These are the known redirects to Template:Db-attack as of 7 Jun 2007.
- The regexp above should catch these as well as a number of possible variants.
-
- Template:A6
- Template:Attackpage
- Template:Attackpages
- Template:CSD:G10
- Template:Csd-a6
- Template:Db-Attack
- Template:Db-a
- Template:Db-a6
- Template:Db-ap
- Template:Db-atk
- Template:Db-attack
- Template:Db-attacktemplate
- Template:Db-g10
- Template:G10
- /  
/** Automatic deletion dropdown
-
-
- Description: Augments the drop-down menu of standard deletion reasons
- generated from MediaWiki:Deletereason-dropdown, to
- automatically pick a reason from the list based on speedy
- deletion tags.
- Maintainers: User:Random832
- /
if (mw.config.get('wgAction') == 'delete' && typeof(csdDeleteForm) == 'undefined') {
(function { // scope
var list = document.getElementById('wpDeleteReasonList');
if (!list)
return;
var summaryBox = document.getElementById('wpReason') || document.getElementById('wpComment');
if (!summaryBox)
return;
var re = /\[\[([^\]\|]*\|)?([^\]]*)\]\]/g; // convert pipe links to their display text.
for (var i = 0; i < list.options.length; i++) {
var o = list.options[i];
o.text = o.text.replace(re, '$2');
}
function csdChangeBox {
if (summaryBox.value.indexOf('content was:') != -1)
summaryBox.value = '';
}
function addEvent(obj, evType, fn, useCapture) {
//alert(obj);
if (obj.addEventListener) {
obj.addEventListener(evType, fn, useCapture);
return true;
} else if (obj.attachEvent) {
var r = obj.attachEvent("on" + evType, fn);
return r;
} else {
alert("Handler could not be attached");
}
}
function findCSD(s) { // s e.g. "U1", "G10"
for (var i = 0; i < list.options.length; i++) {
var o = list.options[i];
if (o.text.indexOf("CSD " + s + ":") == 0)
return o;
if (o.text.indexOf(s + ":") == 0)
return o;
//TODO fine-tuning for A7 and G6
}
}
var reasons_regex = {
'G10' : // copied from User:Ilmari Karonen's script, covers more bases than the others since it's more important (this script should blank the summary in _all_ cases where the other script does
/\{\{\s*(msg:\s*)?(template:\s*)?(db-a(p|tk)?|((csd|db)[-:])?(a6|attack(pages?|template)?|g10))\s*[|}]/i,
// other regexes are simpler and cover probably 99% of actual tags.
'G1' : /\{\{\s*(db-|csd[-:])?(nonsense|ns|g1)\s*\}\}/i,
'G2' : /\{\{\s*(db-|csd[-:])?(test|g2)\s*\}\}/i,
'G3' : /\{\{\s*(db-|csd[-:])?(vandalism|vandal|vand|g3)\s*\}\}/i,
'G4' : /\{\{\s*((db-|csd[-:])?(repost|g4)|deleteagain)\s*\}\}/i,
'G5' : /\{\{\s*(db-|csd[-:])?(banned|ban|g5)\s*\}\}/i,
'G6' : /\{\{\s*(db-|csd[-:])?(maintenance|move|histmerge|g6)\s*\}\}/i, // db-move and db-histmerge should be covered elsewhere if possible
'G7' : /\{\{\s*(db-|csd[-:])?(author|blanked|g7)\s*\}\}/i,
'G8' : /\{\{\s*(db-|csd[-:])?(talk|g8)\s*\}\}/i,
// G9 is for office, there is no tag.
// G10 is covered above
'G11' : /\{\{\s*(db-|csd[-:])?(spam|ad|advert|g11)\s*\}\}/i,
'G12' : /\{\{\s*(db-|csd[-:])?(copyvio|cv|cvio|g12|a8)\s*(\}\}|\|)/i,
'A1' : /\{\{\s*(db-|csd[-:])?((no)?context|a1)\s*\}\}/i,
'A3' : /\{\{\s*(db-|csd[-:])?((no)?content|a3|contact|a4)\s*\}\}/i,
// A4 = A3
// A6 = G10
'A7 (bio)' : /\{\{\s*(nn-|db-|csd[-:])?(a7|notability|bio|person)\s*\}\}/i,
'A7 (web)' : /\{\{\s*(nn-|db-|csd[-:])?(web(site)?|inter(net|tubes))\s*\}\}/i,
'A7 (group)' : /\{\{\s*(db-|csd[-:]|nn-)?(band|club|music|inc|corp|comp(any)?)\s*\}\}/i,
// TODO separate for music/band?
// A8 = G12
'C1' : /(\{\{\s*(db-|csd[-:])?(emptycat|c1)\s*\}\}|empty category)/i,
'U1' : /\{\{\s*(db-|csd[-:])?(userreq|u1|user)\s*\}\}/i,
'I2' : /\{\{\s*(db-|csd[-:])?(noimage|i2)\s*\}\}/i,
'R1' : /\{\{\s*(db-|csd[-:])?(redirnone|r1)\s*\}\}/i,
// no point in including the other image categories here, this will only work
// when deleting a description page with no image
'dummy' : /this will never be reached, it is there to allow every entry above to end in a comma/
}
function autopick_deletion_reason {
for (var csd in reasons_regex) {
if (reasons_regex[csd].test(summaryBox.value)) {
var option = findCSD(csd);
if (!option) {
if (csd == 'G10')
summaryBox.value = "CSD G10: "; // last resort, if G10 can't be found in the menu.
return;
}
list.selectedIndex = option.index;
csdChangeBox; // clear summary box
}
}
// TODO "content before blanking" and A7, etc.
// TODO We can autodetect G8 from the namespace and a redlinked tab.
var xfdregex = /.*\{\{AfDM\|page=([^\|]*)\|.*/;
if (xfdregex.test(summaryBox.value)) {
summaryBox.value = summaryBox.value.replace(xfdregex, '');
return;
}
xfdregex = /.*\{\{mfdtag\|([^}]*)\}\}.*/;
if (xfdregex.test(summaryBox.value)) {
summaryBox.value = summaryBox.value.replace(xfdregex, '');
return;
}
xfdregex = /.*\{\{dated prod\|concern = (\{\{\{concern\|)?(.*?)(\}\}\})?\|month.*/;
if (xfdregex.test(summaryBox.value)) {
summaryBox.value = summaryBox.value.replace(xfdregex, 'WP:PROD, reason was \'$2\'.');
return;
}
if (summaryBox.value.indexOf('\{\{rfd\}\}') != -1) {
// best we can do without a direct link
summaryBox.value = 'RFD';
return;
}
xfdregex = /.*\{\{((db|delete).*?)\}\}.*/;
if (xfdregex.test(summaryBox.value)) { // last resort for unhandled speedy tags
summaryBox.value = summaryBox.value.replace(xfdregex, '$1');
return;
}
}
addEvent(list, "change", csdChangeBox, false);
autopick_deletion_reason;
}); // scope
}