MediaWiki:Gadget-revisionjumper.js: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 143: Line 143:
  }
  }
   
   
function newRequest() {
function makeRequest(method, url) {
  try {
    return new Promise(function (resolve, reject) {
      if (window.XMLHttpRequest) {
        let xhr = new XMLHttpRequest();
        return new XMLHttpRequest();
        xhr.open(method, url);
      } else {
        xhr.onload = function () {
        return new ActiveXObject("MSXML2.XMLHTTP");
            if (this.status >= 200 && this.status < 300) {
      }
                resolve(xhr.response);
  } catch (e) {
            } else {
      return false;
                reject({
  }
                    status: this.status,
}
                    statusText: xhr.statusText
                });
            }
        };
        xhr.onerror = function () {
            reject({
                status: this.status,
                statusText: xhr.statusText
            });
        };
        xhr.send();
    });
}


  // get URL parameters (used for page type variables)
  // get URL parameters (used for page type variables)
Line 171: Line 183:
  }
  }
   
   
  function addrevisionjumper(){
  async function addrevisionjumper(){
  if ((mw.config.get('wgCanonicalNamespace') != 'Special') && (mw.config.get('wgPageName') != 'Wikipedia:Vandalismusmeldung')) {
  if ((mw.config.get('wgCanonicalNamespace') != 'Special') && (mw.config.get('wgPageName') != 'Wikipedia:Vandalismusmeldung')) {
   for(j=0;j<2;j++){
   for(j=0;j<2;j++){
Line 183: Line 195:
     if (rightuser) { rightuser = rightuser.getElementsByTagName('a')[0].innerHTML; } else { rightuser = ''; }
     if (rightuser) { rightuser = rightuser.getElementsByTagName('a')[0].innerHTML; } else { rightuser = ''; }
   } else if (mw.config.get('wgAction') == 'view' && displayonview && !UrlParameters["oldid"]) {
   } else if (mw.config.get('wgAction') == 'view' && displayonview && !UrlParameters["oldid"]) {
     var req10;
     var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvprop=ids&rvdir=newer&rvstart=20000000000000';
    if (req10 = newRequest()) {
    let req10 = await makeRequest("GET", text);
      var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvprop=ids&rvdir=newer&rvstart=20000000000000';
    var firstrevision = req10.responseXML.getElementsByTagName("rev")[0].getAttribute('revid');
      req10.open("GET", text, true);
      req10.send("");
      var firstrevision = req10.responseXML.getElementsByTagName("rev")[0].getAttribute('revid');
    }
     if(mw.config.get('wgCurRevisionId')!=firstrevision) difflink[0] = document.getElementById('firstHeading');
     if(mw.config.get('wgCurRevisionId')!=firstrevision) difflink[0] = document.getElementById('firstHeading');
   } else if (mw.config.get('wgAction') == 'history' && displayonhistory) {
   } else if (mw.config.get('wgAction') == 'history' && displayonhistory) {
Line 242: Line 250:
   
   
             var text8 = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvprop=ids&rvdir=newer&rvstart=20000000000000';
             var text8 = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvprop=ids&rvdir=newer&rvstart=20000000000000';
             var req8 = newRequest();
             let req8 = makeRequest("GET", text);
            req8.open("GET", text, true);
             continuereq8(req8.responseXML.getElementsByTagName("rev")[0].getAttribute('revid'), nextrevision, difflink, j, newline);
             req8.onreadystatechange = function () {
                if(req8.readyState == 4) {
                    continuereq8(req8.responseXML.getElementsByTagName("rev")[0].getAttribute('revid'), nextrevision, difflink, j, newline);
                }
            };
            req8.send("");


             }
             }


             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=user|ids&rvlimit=500';
             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=user|ids&rvlimit=500';
             var req4 = newRequest();
             let req4 = makeRequest("GET", text);
            req4.open("GET", text, true);
             continuereq4(req4.responseXML.getElementsByTagName("rev"), tempposition, tempnumber, templine);
             req4.onreadystatechange = function () {
                if(req4.readyState == 4) {
                    continuereq4(req4.responseXML.getElementsByTagName("rev"), tempposition, tempnumber, templine);
                }
            };
            req4.send(null);
     }
     }
     if(tempnumber==0 && (leftuser==rightuser) && !disablepenultimateeditor){
     if(tempnumber==0 && (leftuser==rightuser) && !disablepenultimateeditor){
          var req19;
          if (req19 = newRequest()) {
             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=user|ids&rvlimit=500';
             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=user|ids&rvlimit=500';
             req19.open("GET", text, true);
             let req19 = makeRequest("GET", text);
            req19.send("");
             var thisrevision = req19.responseXML.getElementsByTagName("rev");
             var thisrevision = req19.responseXML.getElementsByTagName("rev");
             var thisrevisionlength = thisrevision.length;
             var thisrevisionlength = thisrevision.length;
Line 281: Line 273:
             nextrevision2 = thisrevision[l].getAttribute('revid');
             nextrevision2 = thisrevision[l].getAttribute('revid');


             var req9;
             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvprop=ids&rvdir=newer&rvstart=20000000000000';
            if (req9 = newRequest()) {
            let req9 = makeRequest("GET", text);
              var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvprop=ids&rvdir=newer&rvstart=20000000000000';
            var firstrevision = req9.responseXML.getElementsByTagName("rev")[0].getAttribute('revid');
              req9.open("GET", text, true);
              req9.send("");
              var firstrevision = req9.responseXML.getElementsByTagName("rev")[0].getAttribute('revid');
            }


             var changessincemylasteditid = document.getElementById('changessincemylastedit');
             var changessincemylasteditid = document.getElementById('changessincemylastedit');
Line 310: Line 298:
               }
               }
             }
             }
          }
     }
     }
     if (UrlParameters["diff"]) {
     if (UrlParameters["diff"]) {
Line 381: Line 368:
  }
  }
  }
  }
  if ( (UrlParameters["diff"] && !disabledisplayondiff) || (UrlParameters["oldid"] && !UrlParameters["action"] && !disabledisplayonpermalink) || (mw.config.get('wgAction') == 'view' && displayonview && !UrlParameters["oldid"]) || (mw.config.get('wgAction') == 'history' && displayonhistory) ) $(addrevisionjumper);
  if ( (UrlParameters["diff"] && !disabledisplayondiff) || (UrlParameters["oldid"] && !UrlParameters["action"] && !disabledisplayonpermalink) || (mw.config.get('wgAction') == 'view' && displayonview && !UrlParameters["oldid"]) || (mw.config.get('wgAction') == 'history' && displayonhistory) ) $(addrevisionjumper);
   
   
  function movetodiff(type){
  async function movetodiff(type){
   var handt = numberrevisionjumperlength+timerevisionjumperlength;
   var handt = numberrevisionjumperlength+timerevisionjumperlength;
   for (i=0;i<(handt+4);i++) {
   for (i=0;i<(handt+4);i++) {
Line 418: Line 406:
           anothercurrentid = RegExp.$1;
           anothercurrentid = RegExp.$1;
         }
         }
        if (req = newRequest()) {
           if(UrlParameters["diff"]) {
           if(UrlParameters["diff"]) {
             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvstartid='+anothercurrentid+'&rvlimit='+revisionlimit+'&rvprop=ids&rvdir='+direction;
             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvstartid='+anothercurrentid+'&rvlimit='+revisionlimit+'&rvprop=ids&rvdir='+direction;
Line 424: Line 411:
             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvstartid='+currentid+'&rvlimit='+(parseInt(revisionlimit)+1)+'&rvprop=ids&rvdir='+direction;
             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvstartid='+currentid+'&rvlimit='+(parseInt(revisionlimit)+1)+'&rvprop=ids&rvdir='+direction;
           }
           }
           req.open("GET", text, true);
           let req = makeRequest("GET", text);
          req.send("");
           var firstrevision = req.responseXML.getElementsByTagName("rev");
           var firstrevision = req.responseXML.getElementsByTagName("rev");
           firstrevision = firstrevision[firstrevision.length-1].getAttribute('revid');
           firstrevision = firstrevision[firstrevision.length-1].getAttribute('revid');
Line 434: Line 420:
             else if(type==1) location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&diff='+firstrevision+'&oldid='+currentid;
             else if(type==1) location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&diff='+firstrevision+'&oldid='+currentid;
           }
           }
        }
       } else if ((i>=numberrevisionjumperlength && i<=handt)|| i==(handt+1)) {
       } else if ((i>=numberrevisionjumperlength && i<=handt)|| i==(handt+1)) {
         if(UrlParameters["diff"]) {
         if(UrlParameters["diff"]) {
Line 457: Line 442:
           var permanentid = currentid;
           var permanentid = currentid;
         }
         }
         var req;
          
         if (req = newRequest()) {
         var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvstartid='+currentid+'&rvprop=timestamp&rvdir=older';
          var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvstartid='+currentid+'&rvprop=timestamp&rvdir=older';
        let req = makeRequest("GET", text);
          req.open("GET", text, true);
 
          req.send("");
           var lasttimestamp = req.responseXML.getElementsByTagName("rev")[0].getAttribute('timestamp');
           var lasttimestamp = req.responseXML.getElementsByTagName("rev")[0].getAttribute('timestamp');
           var lastminute = lasttimestamp.match(/([^\-]*)\-([^\-]*)\-([^T]*)T([^\:]*)\:([^\:]*)\:([^Z]*)Z/);
           var lastminute = lasttimestamp.match(/([^\-]*)\-([^\-]*)\-([^T]*)T([^\:]*)\:([^\:]*)\:([^Z]*)Z/);
Line 563: Line 546:
           if (newsecond < 10) { newsecond = "0" + newsecond; }
           if (newsecond < 10) { newsecond = "0" + newsecond; }
           var newtime = newyear + newmonth + newday + newhour + newminute2 + newsecond;
           var newtime = newyear + newmonth + newday + newhour + newminute2 + newsecond;
           var req2;
           var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=ids&rvlimit=1&rvdir=older&rvstart='+newtime;
          if (req2 = newRequest()) {
          let req2 = makeRequest("GET", text);
            var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=ids&rvlimit=1&rvdir=older&rvstart='+newtime;
 
            req2.open("GET", text, true);
            req2.send("");
             var lastrevision = req2.responseXML.getElementsByTagName("rev")[0];
             var lastrevision = req2.responseXML.getElementsByTagName("rev")[0];
             if(!lastrevision){
             if(!lastrevision){
              var req3;
              if (req3 = newRequest()) {
                 var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=ids&rvlimit=1&rvdir=newer&rvstart='+newtime;
                 var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=ids&rvlimit=1&rvdir=newer&rvstart='+newtime;
                 req3.open("GET", text, true);
                 let req3 = makeRequest("GET", text);
                req3.send("");
 
                 var lastrevision = req3.responseXML.getElementsByTagName("rev")[0];
                 var lastrevision = req3.responseXML.getElementsByTagName("rev")[0];
                 if(getoldid && !UrlParameters["diff"]) {
                 if(getoldid && !UrlParameters["diff"]) {
Line 583: Line 560:
                   location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&diff='+permanentid+'&oldid='+lastrevision.getAttribute('revid');
                   location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&diff='+permanentid+'&oldid='+lastrevision.getAttribute('revid');
                 }
                 }
              }
             } else {
             } else {
               if(getoldid && !UrlParameters["diff"]) {
               if(getoldid && !UrlParameters["diff"]) {
Line 597: Line 573:
               }
               }
             }
             }
          }
        }
       } else if (i==(handt+2)) {
       } else if (i==(handt+2)) {
         if(UrlParameters["diff"]) {
         if(UrlParameters["diff"]) {
Line 653: Line 627:
         if (newsecond < 10) { newsecond = "0" + newsecond; }
         if (newsecond < 10) { newsecond = "0" + newsecond; }
         var newtime = newyear + newmonth + newday + newhour + newminute2 + newsecond;
         var newtime = newyear + newmonth + newday + newhour + newminute2 + newsecond;
         var req6;
         var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=ids&rvlimit=1&rvdir=older&rvstart='+newtime;
        if (req6 = newRequest()) {
        let req6 = makeRequest("GET", text);
            var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=ids&rvlimit=1&rvdir=older&rvstart='+newtime;
 
            req6.open("GET", text, true);
            req6.send("");
             var lastrevision = req6.responseXML.getElementsByTagName("rev")[0];
             var lastrevision = req6.responseXML.getElementsByTagName("rev")[0];
             if(!lastrevision){
             if(!lastrevision){
              var req7;
              if (req7 = newRequest()) {
                 var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=ids&rvlimit=1&rvdir=newer&rvstart='+newtime;
                 var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=ids&rvlimit=1&rvdir=newer&rvstart='+newtime;
                 req7.open("GET", text, true);
                 let req7 = makeRequest("GET", text);
                req7.send("");
 
                 var lastrevision = req7.responseXML.getElementsByTagName("rev")[0];
                 var lastrevision = req7.responseXML.getElementsByTagName("rev")[0];
                 if(getoldid && !UrlParameters["diff"]) {
                 if(getoldid && !UrlParameters["diff"]) {
Line 673: Line 641:
                   location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&diff='+permanentid+'&oldid='+lastrevision.getAttribute('revid');
                   location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&diff='+permanentid+'&oldid='+lastrevision.getAttribute('revid');
                 }
                 }
              }
             } else {
             } else {
               if(getoldid && !UrlParameters["diff"]) {
               if(getoldid && !UrlParameters["diff"]) {
Line 687: Line 654:
               }
               }
             }
             }
          }
       } else if (i==(handt+3)) {
       } else if (i==(handt+3)) {
         if(UrlParameters["diff"]) {
         if(UrlParameters["diff"]) {
Line 705: Line 671:


             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvprop=ids&rvdir=newer&rvstart=20000000000000';
             var text = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvlimit=1&rvprop=ids&rvdir=newer&rvstart=20000000000000';
             var req = newRequest();
             let req = makeRequest("GET", text);
            req.open("GET", text, true);
             continuereq(req.responseXML.getElementsByTagName("rev")[0].getAttribute('revid'));
             req.onreadystatechange = function () {
 
                if(req.readyState == 4) {
                    continuereq(req.responseXML.getElementsByTagName("rev")[0].getAttribute('revid'));
                }
            };
            req.send(null);
             function continuereq(firstrevision) {
             function continuereq(firstrevision) {