User:Erln434343/monobook.js

/** Creates a button to invert checkboxes on Special:Undelete */ if (wgCanonicalNamespace == "Special" && 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 (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: Attack Page";     }); } /* * 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 (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: Attack Page"; // 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,'Articles for deletion/$1'); return; }  xfdregex = /.*\{\{mfdtag\|([^}]*)\}\}.*/; if(xfdregex.test(summaryBox.value)) { summaryBox.value = summaryBox.value.replace(xfdregex,'Miscellany for deletion/$1'); 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 } // Sensitive IP checker - maintained by east718 if (wgCanonicalNamespace == "Special" && wgCanonicalSpecialPageName == "Blockip") {	ips = Array( Array(/\b63\.162\.143\.21\b/, 'the U.S. Department of Homeland Security'), Array(/\b82\.148\.9(6\.68|7\.69)\b/, 'Qatar'), Array(/\b128\.183\.103\.97\b/, 'NASA'), Array(/\b(((2|5)?6|7|[12]1|2(2|8|9)|3(0|3)|55)\.([01]?\d\d?|2(5[0-5]|[0-4]\d))|130\.22)(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/, 'the U.S. Department of Defense'), Array(/\b138\.16[23](\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/, 'the U.S. Naval Telecommunications Station'), Array(/\b143\.2(2[89]|3[01])(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/, 'the U.S. House of Representatives'), Array(/\b149\.101(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/, 'the U.S. Department of Justice'), Array(/\b156\.33(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/, 'the U.S. Senate'), Array(/\b(162\.4[56]\.([01]?\d\d?|2(5[0-5]|[0-4]\d))|198\.81\.(128|129|1[3-8]\d|191))\.([01]?\d\d?|2(5[0-5]|[0-4]\d))\b/, 'the U.S. Central Intelligence Agency'), Array(/\b192\.197\.(7[7-9]|8[0-6])\.([01]?\d\d?|2(5[0-5]|[0-4]\d))\b/, 'the Government of Canada'), Array(/\b(51(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}|194.60.\d[0-5]?)\.([01]?\d\d?|2(5[0-5]|[0-4]\d))\b/, 'the U.K. Parliament'), Array(/\b66\.230\.(19[2-9]|2[0-3]\d)\.([01]?\d\d?|2(5[0-5]|[0-4]\d))\b/, 'the Wikimedia secure gateway'), Array(/\b91\.198\.174\.(19[2-9]|2([01]\d|2[0-3]))\b/, 'the Wikimedia Toolserver') );	ip = document.getElementById('mw-bi-target').value;	if (/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/.test(ip))	{		for (i = 0; i < ips.length; i++)		{			if (ip.match(ips[i][0]))			{				jsMsg(' ');			}		}	} }