Benutzer:DerHexer/testrevisionjumper.js

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 12. Februar 2009 um 19:16 Uhr durch DerHexer (Diskussion | Beiträge) (test). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
 // <nowiki>
 if(!numberrevisionjumper) var numberrevisionjumper = new Array("10", "50", "150", "500");
 if(!timerevisionjumper) var timerevisionjumper = new Array("1h", "4h", "12h", "3d", "7d", "1m", "3m", "1a", "2a");
 var diffoptionnames = new Array();
 diffoptionnames[0] = new Array();
 diffoptionnames[1] = new Array();
 var numberrevisionjumperlength = numberrevisionjumper.length;
 var timerevisionjumperlength = timerevisionjumper.length;
 for(a=0;a<numberrevisionjumper.length;a++){
   diffoptionnames[0][a] = numberrevisionjumper[a];
 }
 for(b=0;b<timerevisionjumper.length;b++){
   diffoptionnames[1][b] = timerevisionjumper[b];
 }
 
 function newRequest() {
   try {
      if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
      } else {
        return new ActiveXObject("MSXML2.XMLHTTP");
      }
   } catch (e) {
      return false;
   }
 }

 // get URL parameters (used for page type variables)
 var UrlParameters = new Array ();
 readparams();
 
 function readparams() {
  var asReadInUrlParameters;
  var asReadInUrlParameter;
 
  // Get URL parameters
  asReadInUrlParameters = location.search.substring(1, location.search.length).split("&");
  for (i = 0; i < asReadInUrlParameters.length; i++) {
    asReadInUrlParameter = asReadInUrlParameters[i].split("=");
    UrlParameters[decodeURIComponent(asReadInUrlParameter[0])] = decodeURIComponent(asReadInUrlParameter[1]);
  }
 }
 
 function addrevisionjumper(){
  var difflink = new Array();
  difflink[0] = document.getElementById('differences-prevlink');
  difflink[1] = document.getElementById('differences-nextlink');
  var leftuser = document.getElementById('mw-diff-otitle2');
  if (leftuser) { leftuser = leftuser.getElementsByTagName('a')[0].innerHTML; } else { leftuser = ''; }
  var rightuser = document.getElementById('mw-diff-ntitle2');
  if (rightuser) { rightuser = rightuser.getElementsByTagName('a')[0].innerHTML; } else { rightuser = ''; }
  for(j=0;j<2;j++){
   if(difflink[j]) {
    var newlink = document.createElement('select');
    newlink.setAttribute('onchange', 'movetodiff('+j+');');
    newlink.setAttribute('id', 'movetodiff'+j);
    newlink.setAttribute('name', 'movetodiff'+j);
    difflink[j].parentNode.insertBefore( newlink, difflink[j].nextSibling );
    if(j==0 && (leftuser==rightuser)){
      var newline = document.createElement('br');
      difflink[j].parentNode.insertBefore( newline, difflink[j].nextSibling );
           var req4;
           if (req4 = newRequest()) {
             var text = '/w/api.php?format=xml&action=query&prop=revisions&titles='+wgPageName+'&rvprop=user|ids&rvlimit=50';
             req4.open("GET", text, false);
             req4.send("");
 
             var thisrevision = req4.responseXML.getElementsByTagName("rev");
             var thisrevisionlength = thisrevision.length;
             var l = 0;
             while(thisrevision[l]) {
               if(thisrevision[l].getAttribute('user')==leftuser && l<(thisrevisionlength-1)) { l++; } else { break; }
             }
             nextrevision = thisrevision[l].getAttribute('revid');
             var newrevisionlink = document.createElement('a');
             newrevisionlink.setAttribute('href', 'http://de.wikipedia.org/w/index.php?title='+wgPageName+'&oldid='+nextrevision+'&diff=cur');
             var EditTextNode = document.createTextNode('← Zum vorletzen Bearbeiter');
             newrevisionlink.appendChild(EditTextNode);
             difflink[j].parentNode.insertBefore( newrevisionlink, difflink[j].nextSibling );
           }
    }
    var newline2 = document.createElement('br');
    difflink[j].parentNode.insertBefore( newline2, difflink[j].nextSibling );
    var currentmovetodiffid = document.getElementById('movetodiff'+j);
    var newoption = document.createElement("option");
    currentmovetodiffid.appendChild(newoption);
    var newoptiontext = document.createTextNode('Auswahl');
    currentmovetodiffid.getElementsByTagName("option")[0].appendChild(newoptiontext);
    for (var k=0; k<2; k++) {
      if(k==0) { var thisiteration = numberrevisionjumperlength+1; } else { var thisiteration = timerevisionjumperlength+1; }
      for(m=1;m<thisiteration;m++) {
        var newoption = document.createElement("option");
        if(k==0) {
          if(j==0) {
            var thisnewtextnode = diffoptionnames[k][m-1]+' Versionen zurück';
          } else if (j==1) {
            var thisnewtextnode = diffoptionnames[k][m-1]+' Versionen vorwärts';
          }
        } else if (k==1) {
          var regexprevision = diffoptionnames[k][m-1].match(/(\d+)(\D+)/);
          var regexpnumber = RegExp.$1;
          var regexptype = RegExp.$2;
          if(regexptype=='a') { var regexptypename = 'Jahr'; } else if(regexptype=='m') { var regexptypename = 'Monat'; } else if(regexptype=='d') { var regexptypename = 'Tag'; } else if(regexptype=='h') { var regexptypename = 'Stunde'; }
          if(regexpnumber!='1' && regexptype!='h') { regexptypename = regexptypename + 'e'; } else if (regexpnumber!='1' && regexptype=='h') { regexptypename = regexptypename + 'n'; }
          if (j==0) {
            var thisnewtextnode = regexpnumber+' '+regexptypename+' zurück';
          } else if (j==1) { 
            var thisnewtextnode = regexpnumber+' '+regexptypename+' vorwärts';
          }
        }
        var newoptiontext = document.createTextNode(thisnewtextnode);
        currentmovetodiffid.appendChild(newoption);
        if(k==0) { currentmovetodiffid.getElementsByTagName("option")[m].appendChild(newoptiontext); } else if(k==1) { currentmovetodiffid.getElementsByTagName("option")[m+numberrevisionjumperlength].appendChild(newoptiontext); }
      }
    }
    var handt = numberrevisionjumperlength+timerevisionjumperlength;
    var newoption = document.createElement("option");
    var thisnewtextnode = 'prompt Versionen';
    var newoptiontext = document.createTextNode(thisnewtextnode);
    currentmovetodiffid.appendChild(newoption);
    currentmovetodiffid.getElementsByTagName("option")[handt+1].appendChild(newoptiontext);
    var newoption = document.createElement("option");
    var thisnewtextnode = 'prompt Zeit';
    var newoptiontext = document.createTextNode(thisnewtextnode);
    currentmovetodiffid.appendChild(newoption);
    currentmovetodiffid.getElementsByTagName("option")[handt+2].appendChild(newoptiontext);
    if(j==0) { 
      var newoption = document.createElement("option");
      var thisnewtextnode = 'erste Version';
      var newoptiontext = document.createTextNode(thisnewtextnode);
      currentmovetodiffid.appendChild(newoption);
      currentmovetodiffid.getElementsByTagName("option")[handt+3].appendChild(newoptiontext);
    } else if (j==1) {
      var newoption = document.createElement("option");
      var thisnewtextnode = 'letzte Version';
      var newoptiontext = document.createTextNode(thisnewtextnode);
      currentmovetodiffid.appendChild(newoption);
      currentmovetodiffid.getElementsByTagName("option")[handt+3].appendChild(newoptiontext);
    }
   }
  }
 }
 if (UrlParameters["diff"] > "") addOnloadHook(addrevisionjumper);
 
 function movetodiff(type){
   var handt = numberrevisionjumperlength+timerevisionjumperlength;
   for (i=0;i<(handt+3);i++) {
     if (document.getElementById('movetodiff'+type).options[i+1].selected == true) {
       if (i<numberrevisionjumperlength || i==handt) {
         if(type==0) var currentid = document.getElementById('mw-diff-ntitle1');
         else if(type==1) var currentid = document.getElementById('mw-diff-otitle1');
         if(!currentid){ var currentid = document.getElementById('differences-nextlink'); } else { currentid = currentid.getElementsByTagName('a')[0]; }
         currentid = currentid.getAttribute('href').match(/oldid\=(\d+)/);
         currentid = RegExp.$1;
         if (i<numberrevisionjumperlength) {
           var revisionlimit = numberrevisionjumper[i];
         } else {
           var revisionlimit = 'a';
           while(revisionlimit.search(/\D/)!=-1) {
             revisionlimit = prompt("Um wie viele Versionen springen?",'50');
           }
           if (revisionlimit>499) revisionlimit = 499;
         }
         if(type==0) { direction = 'older'; var anothercurrentid = document.getElementById('differences-prevlink'); }
         else if(type==1) { direction = 'newer'; var anothercurrentid = document.getElementById('differences-nextlink'); }
         anothercurrentid = anothercurrentid.getAttribute('href').match(/oldid\=(\d+)/);
         anothercurrentid = RegExp.$1;
         if (req = newRequest()) {
           var text = '/w/api.php?format=xml&action=query&prop=revisions&titles='+wgPageName+'&rvstartid='+anothercurrentid+'&rvlimit='+(parseInt(revisionlimit)+1)+'&rvprop=ids&rvdir='+direction;
           req.open("GET", text, false);
           req.send("");
           var firstrevision = req.responseXML.getElementsByTagName("rev");
           firstrevision = firstrevision[firstrevision.length-1].getAttribute('revid');
           if(type==0) location.href='http://de.wikipedia.org/w/index.php?title='+wgPageName+'&diff='+currentid+'&oldid='+firstrevision;
           else if(type==1) location.href='http://de.wikipedia.org/w/index.php?title='+wgPageName+'&diff='+firstrevision+'&oldid='+currentid;
         }
       } else if ((i>=numberrevisionjumperlength && i<=handt)|| i==(handt+1)) {
         if(type==0) var currentid = document.getElementById('mw-diff-otitle1');
         else if(type==1) var currentid = document.getElementById('mw-diff-ntitle1');
         if(!currentid){ var currentid = document.getElementById('differences-nextlink'); } else { currentid = currentid.getElementsByTagName('a')[0]; }
         currentid = currentid.getAttribute('href').match(/oldid\=(\d+)/);
         currentid = RegExp.$1;
         alert(currentid);
         if(type==0) var permanentid = document.getElementById('mw-diff-ntitle1');
         else if(type==1) var permanentid = document.getElementById('mw-diff-otitle1');
         if(!currentid){ var permanentid = document.getElementById('differences-nextlink'); } else { permanentid = permanentid.getElementsByTagName('a')[0]; }
         permanentid = permanentid.getAttribute('href').match(/oldid\=(\d+)/);
         permanentid = RegExp.$1;
         var req;
         if (req = newRequest()) {
           var text = '/w/api.php?format=xml&action=query&prop=revisions&titles='+wgPageName+'&rvlimit=1&rvstartid='+currentid+'&rvprop=timestamp&rvdir=older';
           req.open("GET", text, false);
           req.send("");
 
           var lasttimestamp = req.responseXML.getElementsByTagName("rev")[0].getAttribute('timestamp');
           var lastminute = lasttimestamp.match(/([^\-]*)\-([^\-]*)\-([^T]*)T([^\:]*)\:([^\:]*)\:([^Z]*)Z/);
           lastyear = RegExp.$1;
           lastmonth = RegExp.$2;
           lastday = RegExp.$3;
           lasthour = parseInt(RegExp.$4);
           if (lasthour < 10) { lasthour = "0" + lasthour.toString(); } else { lasthour = lasthour.toString() }
           lastminute = RegExp.$5;
           lastsecond = RegExp.$6;
           var lastdate = Date.parse(lastmonth + ' ' + lastday + ' ' + lastyear + ' ' + lasthour + ':' + lastminute + ':' + lastsecond);
           if(i>=numberrevisionjumperlength && i<=handt) {
             var regexprevision = timerevisionjumper[i-numberrevisionjumperlength].match(/(\d+)(\D+)/);
             var regexpnumber = RegExp.$1;
             var regexptype = RegExp.$2;
             if(regexptype=='a') { var yearmatched = true; } else { var yearmatched = false; }
             if(regexptype=='m') { var monthmatched = true; } else { var monthmatched = false; }
             if(regexptype=='d') { var daymatched = true; } else { var daymatched = false; }
             if(regexptype=='h') { var hourmatched = true; } else { var hourmatched = false; }

             if(type==0) {
               if(yearmatched) {
                 lastdate = lastdate-(parseInt(regexpnumber)*31557816000); 
               }
               if(monthmatched) {
                 lastdate = lastdate-(parseInt(regexpnumber)*(31557816000/12));
               }
               if(daymatched) {
                 lastdate = lastdate-(parseInt(regexpnumber)*86400000);
               }
               if(hourmatched) {
                 alert(regexpnumber);
                 alert(lastdate);
                 lastdate = lastdate-(parseInt(regexpnumber)*3600000);
                 alert(lastdate);
               }
             } else if(type==1) {
               if(yearmatched) {
                 lastdate = lastdate+(parseInt(regexpnumber)*31557816000); 
               } else if(monthmatched) {
                 lastdate = lastdate+(parseInt(regexpnumber)*(31557816000/12));
               } else if(daymatched) {
                 lastdate = lastdate+(parseInt(regexpnumber)*86400000);
               } else if(hourmatched) {
                 lastdate = lastdate+(parseInt(regexpnumber)*3600000);
               }
             }
           } else if (i==(handt+1)) {
             var getjumptime = prompt('Um welche Zeit soll gesprungen werden? [a = Jahr; m = Monat; d = Tag; h = Stunde; alles optional -> „1h“ allein springt somit um eine Stunde in die gewünsche Richtung]', '1a 12m 30d 24h');
             var newregularexp = /(\d*)(\D*)(\d*)?(\D*)?(\d*)?(\D*)?(\d*)?(\D*)?/;
             var regexprevision = newregularexp.exec(getjumptime);
             var yearmatched = false;
             var monthmatched = false;
             var daymatched = false;
             var hourmatched = false;
             for(d=1;d<regexprevision.length;d++){
              if(regexprevision[d]) {
               if(regexprevision[d].search(/a/)!=-1) { 
                 if(type==0) {
                   lastdate = lastdate-(parseInt(regexprevision[d-1])*31557816000);
                 } else if(type==1) {
                   lastdate = lastdate+(parseInt(regexprevision[d-1])*31557816000);
                 }
               }
               if(regexprevision[d].search(/m/)!=-1) {
                 if(type==0) {
                   lastdate = lastdate-(parseInt(regexprevision[d-1])*(31557816000/12));
                 } else if(type==1) {
                   lastdate = lastdate+(parseInt(regexprevision[d-1])*(31557816000/12));
                 }
               }
               if(regexprevision[d].search(/d/)!=-1) {
                 if(type==0) {
                   lastdate = lastdate-(parseInt(regexprevision[d-1])*86400000);
                 } else if(type==1) {
                   lastdate = lastdate+(parseInt(regexprevision[d-1])*86400000);
                 }
               }
               if(regexprevision[d].search(/h/)!=-1) {
                 if(type==0) {
                   lastdate = lastdate-(parseInt(regexprevision[d-1])*3600000);
                 } else if(type==1) {
                   lastdate = lastdate+(parseInt(regexprevision[d-1])*3600000);
                 }
               }
              } else {
                break;
              }
             }
           }
           var newdate = new Date();
           newdate.setTime(lastdate);
           var newyear = newdate.getFullYear().toString();
           var newmonth = newdate.getMonth()+1;
           if (newmonth < 10) { newmonth = "0" + newmonth; }
           var newday = newdate.getDate();
           if (newday < 10) { newday = "0" + newday; }
           var newhour = newdate.getHours();
           if (newhour < 10) { newhour = "0" + newhour; }
           var newminute = newdate.getMinutes();
           if (newminute < 10) { var newminute2 = "0" + newminute; } else { var newminute2 = newminute; }
           var newsecond = newdate.getSeconds();
           if (newsecond < 10) { newsecond = "0" + newsecond; }
           var newtime = newyear + newmonth + newday + newhour + newminute2 + newsecond;
           alert(newtime);
           var req2;
           if (req2 = newRequest()) {
             var text = '/w/api.php?format=xml&action=query&prop=revisions&titles='+wgPageName+'&rvprop=ids&rvlimit=1&rvdir=older&rvstart='+newtime;
             req2.open("GET", text, false);
             req2.send("");
 
             var lastrevision = req2.responseXML.getElementsByTagName("rev")[0];
             if(!lastrevision){
               var req3;
               if (req3 = newRequest()) {
                 var text = '/w/api.php?format=xml&action=query&prop=revisions&titles='+wgPageName+'&rvprop=ids&rvlimit=1&rvdir=newer&rvstart='+newtime;
                 req3.open("GET", text, false);
                 req3.send("");
 
                 var lastrevision = req3.responseXML.getElementsByTagName("rev")[0];
                 location.href='http://de.wikipedia.org/w/index.php?title='+wgPageName+'&diff='+permanentid+'&oldid='+lastrevision.getAttribute('revid');
               }
             } else {
               var thisrevid = lastrevision.getAttribute('revid');
               if(thisrevid == wgCurRevisionId) {
                 location.href='http://de.wikipedia.org/w/index.php?title='+wgPageName+'&diff=cur'+'&oldid='+permanentid;
               } else {
                 if(type==0) location.href='http://de.wikipedia.org/w/index.php?title='+wgPageName+'&diff='+permanentid+'&oldid='+thisrevid;
                 else if(type==1) location.href='http://de.wikipedia.org/w/index.php?title='+wgPageName+'&diff='+thisrevid+'&oldid='+permanentid;
               }
             }
           }
         }
       } else if((type==0) && (i==(handt+2))) {
         if (req = newRequest()) {
           var text = '/w/api.php?format=xml&action=query&prop=revisions&titles='+wgPageName+'&rvlimit=1&rvprop=ids&rvdir=newer&rvstart=20000000000000';
           req.open("GET", text, false);
           req.send("");
           var firstrevision = req.responseXML.getElementsByTagName("rev")[0].getAttribute('revid');
           location.href='http://de.wikipedia.org/w/index.php?title='+wgPageName+'&diff=prev&oldid='+firstrevision;
         }
       } else if((type==1) && (i==(handt+2))) {
         location.href='http://de.wikipedia.org/w/index.php?title='+wgPageName+'&diff=cur';
       }
     }
   }
 }
 // </nowiki>