Misplaced Pages

MediaWiki:Group-sysop.js: Difference between revisions

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.
Browse history interactively← Previous editNext edit →Content deleted Content added
Revision as of 17:34, 19 June 2008 view sourceEast718 (talk | contribs)Extended confirmed users26,172 editsm fix← Previous edit Revision as of 19:37, 19 June 2008 view source MZMcBride (talk | contribs)Extended confirmed users190,644 edits updated codeNext edit →
Line 204: Line 204:
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