# மீடியாவிக்கி: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  
}