Article snapshot taken from Wikipedia with creative commons attribution-sharealike license.
Give it a read and then ask your questions in the chat.
We can research this topic together.
Array(/\b198\.81\.(128|129|1|191)\.{1,3}\b/, 'the ]'),
Array(/\b198\.81\.(128|129|1|191)\.{1,3}\b/, 'the ]'),
Array(/\b66\.230\.(192|193|194|195|196|197|198|199|2)\.{1,3}\b/, 'the ]'),
Array(/\b66\.230\.(192|193|194|195|196|197|198|199|2)\.{1,3}\b/, 'the ]'),
Array(/\b(91\.198\.174\.(194|201)|145\.97\.39\.143)\b/, 'the ]')
Array(/\b91\.198\.174\.(19|2((0|1)|2))\b/, 'the ]')
);
);
ip = document.getElementById('mw-bi-target').value;
ip = document.getElementById('mw-bi-target').value;
Revision as of 19:37, 19 June 2008
/** Creates a button to invert checkboxes on Special:Undelete */
if (wgCanonicalNamespace == "Special" && wgCanonicalSpecialPageName == "Undelete") {
(function () {
var form = document.forms;
if( !form ) {
return;
}
var elements = form.elements;
var submitButton = elements;
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;
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: ]
*/
if (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 = "]: ]";
})();
}
/*
* Note: These are the known redirects to ] as of 7 Jun 2007.
* The regexp above should catch these as well as a number of possible variants.
*
* ]
* ]
* ]
* ]
* ]
* ]
* ]
* ]
* ]
* ]
* ]
* ]
* ]
* ]
*/
/** Automatic deletion dropdown
*******************************************************
*
* Description: Augments the drop-down menu of standard deletion reasons
* generated from ], to
* automatically pick a reason from the list based on speedy
* deletion tags.
* Maintainers: ]
*/
if (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;
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;
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 ]'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.test(summaryBox.value)) {
var option = findCSD(csd);
if(!option) {
if(csd == 'G10')
summaryBox.value = "]: ]"; // 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,'], reason was \'$2\'.');
return;
}
if(summaryBox.value.indexOf('\{\{rfd\}\}') != -1) {
// best we can do without a direct link
summaryBox.value = ']';
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
}
// Sensitive IP checker - maintained by east718
if (wgPageName == 'Special:BlockIP')
{
ips = Array(
Array(/\b63\.162\.143\.21\b/, 'the ]'),
Array(/\b82\.148\.(96\.68|97\.69)\b/, ']'),
Array(/\b128\.183\.103\.97\b/, ']'),
Array(/\b130\.22\.{1,3}\.{1,3}\b/, 'the ]'),
Array(/\b138\.16(2|3)\.{1,3}\.{1,3}\b/, 'the ]'),
Array(/\b143\.2(28|29|30|31)\.{1,3}\.{1,3}\b/, 'the ]'),
Array(/\b149\.101\.{1,3}\.{1,3}\b/, 'the ]'),
Array(/\b156\.33\.{1,3}\.{1,3}\b/, 'the ]'),
Array(/\b162\.4(5|6)\.{1,3}\.{1,3}\b/, 'the ]'),
Array(/\b192\.197\.(77|78|79|80|81|82|83|84|85|86)\.{1,3}\b/, 'the ]'),
Array(/\b\194.60.?\.{1,3}\b/, 'the ]'),
Array(/\b198\.81\.(128|129|1|191)\.{1,3}\b/, 'the ]'),
Array(/\b66\.230\.(192|193|194|195|196|197|198|199|2)\.{1,3}\b/, 'the ]'),
Array(/\b91\.198\.174\.(19|2((0|1)|2))\b/, 'the ]')
);
ip = document.getElementById('mw-bi-target').value;
if (/\b(?:(?:25|2|??)\.){3}(?:25|2|??)\b/.test(ip))
{
for (i=0; i < ips.length; i++)
{
if (ip.match(ips))
{
jsMsg('<table><tr><td valign="center"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Nuvola_apps_important.svg/48px-Nuvola_apps_important.svg.png" /></td><td valign="center">You are blocking a sensitive IP address belonging to ' + ips.replace(']', '</a>') + '. Please be sure to <a href="http://meta.wikimedia.org/Communications_committee/Notifications" class="extiw" title="meta:Communications_committee/Notifications">notify</a> the <a href="http://meta.wikimedia.org/Communications_committee" class="extiw" title="meta:Communications_committee">Wikimedia Foundation Communications Committee</a> immediately.</td></tr></table>');
}
}
}
}
MediaWiki:Group-sysop.js: Difference between revisions
Add topic