Benutzer:Spacebirdy/patrolled.js

Aus Wiktionary, dem freien Wörterbuch
/* <pre> */
/*
On [[Special:Recenchanges]], wherever a (diff) link appears with an 
RCID= parameter, add a (mark) link right after it.

TODO: in custom.js, don't show this option, if not a sysop.
*/

 wiktCurLink = 0;
 wiktCurMarkedLink = 0;
 wiktLinks = new Array();

function workAroundMicrosoft() {
  var reqObj = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
   try {
    reqObj = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
    try {
      reqObj = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
     reqObj = false;
    }
   }
@else
   reqObj = false;
@end @*/
  if (!reqObj) {
   try {
    reqObj = new XMLHttpRequest();
   } catch (e) {
    reqObj = false;
   }
  }
 return reqObj;
}

 wiktLink = new workAroundMicrosoft();

function wiktWhiteListed( user ) {
  if (!user) { return false; }
  if (wgServer != "http://en.wiktionary.org" ) {return false;} //TODO: provide mechanism for other sites using this code to have their own whitelist.  Hmmm, I guess they can override this function...
  var whiteList = ''; //I suppose keeping these alphabetic might help.  ASCII only - sry.
//Note to other sysops: build these lists out.  Add contributors that are good
//...and are not suspected sockpuppets, etc.  Try and keep these in alphabetic order.  Only add
//numeric IPs if you see 10 or more good contribs, no rollbacks, and they don'e seem to be in
//a highly dynamic range.  Watch out for extra commas.  Don't add sysops that are supposed to
//mark their own (via [[Special:Preferences]]) edits.  YMMV.  HAND.  Whatever.

  whiteList += ',24.255.155.100';
  whiteList += ',62.163.45.60,64.50.84.194,62.194.18.128';
  whiteList += ',84.3.248.3,84.3.248.240,84.3.249.67';
  whiteList += ',85.156.128.119,87.69.38.78';
  whiteList += ',194.249.53.251';
  whiteList += ',198.62.10.100';
  whiteList += ',203.222.154.2,212.29.160.170,212.205.252.22';
  whiteList += ',220.54.155.201,220.239.249.36';
  whiteList += ',16,16@r';
  whiteList += ',Alasdair,Alhen,Amjaabc,Andyluciano,AnnaKucsma,Arctic.gnome,AugPi,Az1568,AzaToth';
  whiteList += ',Baron_de_Saint-Rémy,Basawala,Beobach972,Bisoud,BiT,Blastu,Brpellis,';
  whiteList += ',Calavera,CJLippert,Connel_MacKenzieBot,Cynewulf';
  whiteList += ',Dart_evader,DAVilla,Dcljr,Derbeth,Dfeuer,Dmol,Dodde,Doddebot,Doug_Hockin';
  whiteList += ',Ed_Poor,El_Chico,EncycloPetey,Enginear,Eric_Utgerd';
  whiteList += ',GerardM';
  whiteList += ',Hamaryns,HinoiFan,Hopiakuta';
  whiteList += ',Izumi5';
  whiteList += ',Jaroslavleff,Jeffqyzt,Jimp,Jronner,Jyril,Jusjih';
  whiteList += ',Kappa,Keffy,Kevin_Ryde,Krun,KYPark,Lmaltier';
  whiteList += ',M7,Mattrogers,MGSpiller,Medellia,MichaelLau,Moglex,Morkva,Mxn';
  whiteList += ',Nathanael_Bar-Aur_L.';
  whiteList += ',Oleg_Katsitadze,Opiaterein,Ortografix,Pathoschild,Ptcamn,Pumpie';
  whiteList += ',Patzak,PierreAbbat,Pschemp'
  whiteList += ',Raghun,RJFJR,Rklawton,UllmannBot,RobotGMwikt,Rsvk';
  whiteList += ',Saltmarsh,Schoenfeld,Sannab,Scs,Siri_We,Smurrayinchester,SnoopY,Spacebirdy';
  whiteList += ',DblRedirBot,TheCheatBot,TheDaveBot,The_Wrong_Man,ThirdPersBot,PastBot';
  whiteList += ',Taxman,Tirkfl,Tohru,Uncle_G,V-ball,Venere,Visviva,Wanjuscha';
  whiteList += ',Werdna,Werdnabot,Williamsayers79,Xhienne,Yyy' ;
  whiteList += ',' ; //list starts and ends with comma
  if (whiteList.search(','+user+',') != -1) { return true; }
  return false;
}

function wiktAddMarkLink( l, l2 ) {
      var title=l.split('title=')[1].split('&')[0];
      var rcid=l.split('rcid=')[1].split('&')[0];
      var newlink = document.createElement('a');
          newlink.innerHTML = '<a href="' + mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' +
                              title + '&action=markpatrolled&rcid=' + rcid + '" ' + 
                              'onclick="wiktMarkOneLink(this); return false;">(mark?</a>' ;
      var newlink2 = document.createTextNode(' - ');
          l2.parentNode.insertBefore(newlink2, l2.nextSibling);
          l2.parentNode.insertBefore(newlink, newlink2.nextSibling);
}

function wiktMarkOneLink( urlToGet, rawUrl ) {
  if (!rawUrl) {
      var rawUrl = urlToGet.toString();
    }
      var link = new XMLHttpRequest();
      link.open( "GET", rawUrl, true );
      link.onreadystatechange = function() {};
      link.send(null);
  var title = rawUrl.split('title=')[1].split('&')[0];
  var rcid  = rawUrl.split('rcid=')[1].split('&')[0];
  if (getCookie('WiktPrefPatrolFast') != 'true') {
      alert('Marked ' + title + ' (rcid=' + rcid + ')' );
  }
}

function wiktJustClickIt( l, l2 ) {
      var title=l.split('title=')[1].split('&')[0];
      var rcid=l.split('rcid=')[1].split('&')[0];
      var newlink = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' +
                    title + '&action=markpatrolled&rcid=' + rcid ;
      var wiktLink = new XMLHttpRequest();
      wiktLink.open( "GET", newlink, true );
      wiktLink.onreadystatechange = function() {
        if (wiktLink.readyState==4) {
           setTimeout( 'wiktDoNextLink();', 0);
        }
      };
      wiktLink.send(null);
}

function wiktGetNextUser( j ) {
  for (var cnt=j; cnt<(j+7); cnt++) {
   if (cnt != (j+2)) {
    var nxtLink = document.links[cnt];
    var txtLink = nxtLink.toString().split('User:')[1];
    if (txtLink) {
      txtLink += "&";
      return txtLink.split('&')[0];
    } else {
      txtLink = nxtLink.toString().split('index.php?title=Special:Contributions&target=')[1];
      if (txtLink) {
        return txtLink;
      }
    }
   }
  }
  return null;
}

//Once every 5 minutes, refresh (only if showing last 49, 499 or 4999.)
//TODO: Add an ON/OFF link somewhere instead of hardcoding it to my Special:Preferences default
function refreshIf500() {
  var loc = document.location.href;
  if ( (loc.search('&limit=49') != -1)  ){
     document.location.href = loc;
  }
}

function wiktReformatRecentChangesDiffLinks() {
  setTimeout( 'wiktReformatRC()', 1);
}

function wiktDoNextLink() {
  wiktCurLink--;
  if (wiktCurLink < 1) {
    return;
  }
  var skipping = true;
  var skipped = 0;
  while (skipping) {
  if (skipped > 20) { skipping = false; }
  var j = wiktCurLink;
    var l2 = wiktLinks[j];
    if (l2) {
      var l = l2.toString();
      if (l.search(/&rcid=/) != -1 ) {
        var editor = wiktGetNextUser( j );
        if (wiktWhiteListed( editor )) {
          wiktJustClickIt( l, l2 );
          skipping = false;
        } else {
          //wiktAddMarkLink( l, l2 );
          skipped++;
        }
      } else { skipped++; }
    } else { skipped++; }
  }
  setTimeout( 'wiktDoNextLink();', 1);
}


function wiktReformatMoreRC() {
  for (i=0; i<20; i++) {
    var j = wiktCurMarkedLink--;
    if (j < 1) { return; }
    var l2 = wiktLinks[j];
    if (l2) {
      var l = l2.toString();
      if (l.search(/&rcid=/) != -1 ) {
        var editor = wiktGetNextUser( j );
        if (wiktWhiteListed( editor )) {
          //wiktJustClickIt( l, l2 );
        } else {
          wiktAddMarkLink( l, l2 );
        }
      }
    }
  }
  setTimeout( 'wiktReformatMoreRC();', 1);
}
  
function wiktReformatRC() {
  if (wgPageName != "Special:Recentchanges") { return; }
  var ok = true;
  wiktLinks = document.links;
  wiktCurLink = wiktLinks.length;
  wiktCurMarkedLink = wiktLinks.length;
  //now start clicking the whitelisted links
  setTimeout( 'wiktDoNextLink();', 1);
  setTimeout( 'wiktReformatMoreRC();', 1);
  setTimeout( 'refreshIf500();', 300000); //once every 5 minutes
}

addLoadEvent( wiktReformatRecentChangesDiffLinks );