MediaWiki:Gadget-RevisionJumper.js: Difference between revisions

Want an adless experience? Log in or Create an account.
Updated script to most recent version.
(Created page)
 
(Updated script to most recent version.)
Line 19: Line 19:
                                         'How long to skip? [a = year; m = month; d = day; h = hour; all items optional -> "1h" only causes a jump of 1 hour in the selected direction]',
                                         'How long to skip? [a = year; m = month; d = day; h = hour; all items optional -> "1h" only causes a jump of 1 hour in the selected direction]',
                                         "What time to skip to? [syntax: year-month-day hour:minute; year-month-day possible as well -> thus 2007-12-31 shows the revision that has been available on New Year's Eve at 00:00]");  
                                         "What time to skip to? [syntax: year-month-day hour:minute; year-month-day possible as well -> thus 2007-12-31 shows the revision that has been available on New Year's Eve at 00:00]");  
// Version: 1.2.5


  if(!getoldid) var getoldid = false;
  if(!getoldid) var getoldid = false;
  if(!displayonview) var displayonview = false;
  if(!displayonview) var displayonview = false;
  if(!displayonhistory) var displayonhistory = true;
  if(!displayonhistory) var displayonhistory = false;
  if(!disabledisplayonpermalink) var disabledisplayonpermalink = false;
  if(!disabledisplayonpermalink) var disabledisplayonpermalink = false;
  if(!disabledisplayondiff) var disabledisplayondiff = false;
  if(!disabledisplayondiff) var disabledisplayondiff = false;
  if(!disablepenultimateeditor) var disablepenultimateeditor = false;
  if(!disablepenultimateeditor) var disablepenultimateeditor = false;
  if(!disablechangessincemylastedit) var disablechangessincemylastedit = false;
  if(!disablechangessincemylastedit) var disablechangessincemylastedit = false;
  if(!numberrevisionjumper) var numberrevisionjumper = new Array("5", "15", "25", "50");
  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");
  if(!timerevisionjumper) var timerevisionjumper = new Array("1h", "4h", "12h", "3d", "7d", "1m", "3m", "1a", "2a");
  var diffoptionnames = new Array();
  var diffoptionnames = new Array();
Line 70: Line 72:
   
   
  function addrevisionjumper(){
  function addrevisionjumper(){
  if (mw.config.get('wgCanonicalNamespace') != 'Special') {
  if (wgCanonicalNamespace != 'Special') {
   for(j=0;j<2;j++){
   for(j=0;j<2;j++){
   var difflink = new Array();
   var difflink = new Array();
Line 107: Line 109:
     difflink[j].parentNode.insertBefore( newlink, difflink[j].nextSibling );
     difflink[j].parentNode.insertBefore( newlink, difflink[j].nextSibling );
     if(!disablechangessincemylastedit && !document.getElementById('changessincemylastedit')) {
     if(!disablechangessincemylastedit && !document.getElementById('changessincemylastedit')) {
          var req4;
 
          if (req4 = newRequest()) {
            function continuereq4(thisrevisionreq4) {
            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';
            req4.open("GET", text, false);
            req4.send("");
   
   
            var thisrevision = req4.responseXML.getElementsByTagName("rev");
             var thisrevisionlength = thisrevisionreq4.length;
             var thisrevisionlength = thisrevision.length;
             var l = 0;
             var l = 0;
             while(thisrevision[l]) {
             while(thisrevisionreq4[l]) {
               if(thisrevision[l].getAttribute('user')!=mw.config.get('wgUserName') && l<(thisrevisionlength-1)) { l++; } else { break; }
               if(thisrevisionreq4[l].getAttribute('user')!=wgUserName && l<(thisrevisionlength-1)) { l++; } else { break; }
            }
            nextrevision = thisrevision[l].getAttribute('revid');
            var req8;
            if (req8 = 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&rvprop=ids&rvdir=newer&rvstart=20000000000000';
              req8.open("GET", text, false);
              req8.send("");
              var firstrevision = req8.responseXML.getElementsByTagName("rev")[0].getAttribute('revid');
             }
             }
            nextrevision = thisrevisionreq4[l].getAttribute('revid');
            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();
            req8.open("GET", text, true);
            req8.onreadystatechange = function () {
                if(req8.readyState == 4) {
                    continuereq8(req8.responseXML.getElementsByTagName("rev")[0].getAttribute('revid'));
                }
            };
            req8.send("");
            function continuereq8(firstrevision) {
             if(nextrevision!=mw.config.get('wgCurRevisionId') && nextrevision!=firstrevision) {
             if(nextrevision!=mw.config.get('wgCurRevisionId') && nextrevision!=firstrevision) {
               var newrevisionlink = document.createElement('a');
               var newrevisionlink = document.createElement('a');
               newrevisionlink.setAttribute('id', 'changessincemylastedit');
               newrevisionlink.setAttribute('id', 'changessincemylastedit');
               newrevisionlink.setAttribute('href', mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&oldid='+nextrevision+'&diff=cur');
               newrevisionlink.setAttribute('href', mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&oldid='+nextrevision+'&diff=cur');
               if(j==0) var EditTextNode = document.createTextNode('← '+configjumper[0]);
               if(j==0) var EditTextNode = document.createTextNode('← '+configrevisionjumper[0]);
               else if(j==1) var EditTextNode = document.createTextNode(configjumper[0]+' →');
               else if(j==1) var EditTextNode = document.createTextNode(configrevisionjumper[0]+' →');
               newrevisionlink.appendChild(EditTextNode);
               newrevisionlink.appendChild(EditTextNode);
               var newline = document.createElement('br');
               var newline = document.createElement('br');
Line 138: Line 142:
               difflink[j].parentNode.insertBefore( newrevisionlink, difflink[j].nextSibling );
               difflink[j].parentNode.insertBefore( newrevisionlink, difflink[j].nextSibling );
             }
             }
          }
            }
 
            }
 
            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();
            req4.open("GET", text, true);
            req4.onreadystatechange = function () {
                if(req4.readyState == 4) {
                    continuereq4(req4.responseXML.getElementsByTagName("rev"));
                }
            };
            req4.send(null);
     }
     }
     if(j==0 && (leftuser==rightuser) && !disablepenultimateeditor){
     if(j==0 && (leftuser==rightuser) && !disablepenultimateeditor){
Line 170: Line 187:
               var newrevisionlink = document.createElement('a');
               var newrevisionlink = document.createElement('a');
               newrevisionlink.setAttribute('href', mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&oldid='+nextrevision+'&diff=cur');
               newrevisionlink.setAttribute('href', mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&oldid='+nextrevision+'&diff=cur');
               var EditTextNode = document.createTextNode('← '+configjumper[1]);
               var EditTextNode = document.createTextNode('← '+configrevisionjumper[1]);
               newrevisionlink.appendChild(EditTextNode);
               newrevisionlink.appendChild(EditTextNode);
               newrevisionlink.setAttribute('id', 'penultimateeditor');
               newrevisionlink.setAttribute('id', 'penultimateeditor');
Line 191: Line 208:
     var newoption = document.createElement("option");
     var newoption = document.createElement("option");
     currentmovetodiffid.appendChild(newoption);
     currentmovetodiffid.appendChild(newoption);
     if(j==0) var newoptiontext = document.createTextNode(configjumper[2]);
     if(j==0) var newoptiontext = document.createTextNode(configrevisionjumper[2]);
     else if (j==1) var newoptiontext = document.createTextNode(configjumper[3]);
     else if (j==1) var newoptiontext = document.createTextNode(configrevisionjumper[3]);
     currentmovetodiffid.getElementsByTagName("option")[0].appendChild(newoptiontext);
     currentmovetodiffid.getElementsByTagName("option")[0].appendChild(newoptiontext);
     for (var k=0; k<2; k++) {
     for (var k=0; k<2; k++) {
Line 200: Line 217:
         if(k==0) {
         if(k==0) {
           if(j==0) {
           if(j==0) {
             var thisnewtextnode = diffoptionnames[k][m-1]+' '+configjumper[4];
             var thisnewtextnode = diffoptionnames[k][m-1]+' '+configrevisionjumper[4];
           } else if (j==1) {
           } else if (j==1) {
             var thisnewtextnode = diffoptionnames[k][m-1]+' '+configjumper[5];
             var thisnewtextnode = diffoptionnames[k][m-1]+' '+configrevisionjumper[5];
           }
           }
         } else if (k==1) {
         } else if (k==1) {
Line 208: Line 225:
           var regexpnumber = RegExp.$1;
           var regexpnumber = RegExp.$1;
           var regexptype = RegExp.$2;
           var regexptype = RegExp.$2;
           if(regexptype=='a') { var regexptypename = configjumper[6]; } else if(regexptype=='m') { var regexptypename = configjumper[7]; } else if(regexptype=='d') { var regexptypename = configjumper[8]; } else if(regexptype=='h') { var regexptypename = configjumper[9]; }
           if(regexptype=='a') { var regexptypename = configrevisionjumper[6]; } else if(regexptype=='m') { var regexptypename = configrevisionjumper[7]; } else if(regexptype=='d') { var regexptypename = configrevisionjumper[8]; } else if(regexptype=='h') { var regexptypename = configrevisionjumper[9]; }
           if (j==0) {
           if (j==0) {
             var thisnewtextnode = regexpnumber+' '+regexptypename+' '+configjumper[10];
             var thisnewtextnode = regexpnumber+' '+regexptypename+' '+configrevisionjumper[10];
           } else if (j==1) {  
           } else if (j==1) {  
             var thisnewtextnode = regexpnumber+' '+regexptypename+' '+configjumper[11];
             var thisnewtextnode = regexpnumber+' '+regexptypename+' '+configrevisionjumper[11];
           }
           }
         }
         }
Line 222: Line 239:
     var handt = numberrevisionjumperlength+timerevisionjumperlength;
     var handt = numberrevisionjumperlength+timerevisionjumperlength;
     var newoption = document.createElement("option");
     var newoption = document.createElement("option");
     var thisnewtextnode = configjumper[12];
     var thisnewtextnode = configrevisionjumper[12];
     var newoptiontext = document.createTextNode(thisnewtextnode);
     var newoptiontext = document.createTextNode(thisnewtextnode);
     currentmovetodiffid.appendChild(newoption);
     currentmovetodiffid.appendChild(newoption);
     currentmovetodiffid.getElementsByTagName("option")[handt+1].appendChild(newoptiontext);
     currentmovetodiffid.getElementsByTagName("option")[handt+1].appendChild(newoptiontext);
     var newoption = document.createElement("option");
     var newoption = document.createElement("option");
     var thisnewtextnode = configjumper[13];
     var thisnewtextnode = configrevisionjumper[13];
     var newoptiontext = document.createTextNode(thisnewtextnode);
     var newoptiontext = document.createTextNode(thisnewtextnode);
     currentmovetodiffid.appendChild(newoption);
     currentmovetodiffid.appendChild(newoption);
     currentmovetodiffid.getElementsByTagName("option")[handt+2].appendChild(newoptiontext);
     currentmovetodiffid.getElementsByTagName("option")[handt+2].appendChild(newoptiontext);
     var newoption = document.createElement("option");
     var newoption = document.createElement("option");
     var thisnewtextnode = configjumper[14];
     var thisnewtextnode = configrevisionjumper[14];
     var newoptiontext = document.createTextNode(thisnewtextnode);
     var newoptiontext = document.createTextNode(thisnewtextnode);
     currentmovetodiffid.appendChild(newoption);
     currentmovetodiffid.appendChild(newoption);
Line 238: Line 255:
     if(j==0) {  
     if(j==0) {  
       var newoption = document.createElement("option");
       var newoption = document.createElement("option");
       var thisnewtextnode = configjumper[15];
       var thisnewtextnode = configrevisionjumper[15];
       var newoptiontext = document.createTextNode(thisnewtextnode);
       var newoptiontext = document.createTextNode(thisnewtextnode);
       currentmovetodiffid.appendChild(newoption);
       currentmovetodiffid.appendChild(newoption);
Line 244: Line 261:
     } else if (j==1) {
     } else if (j==1) {
       var newoption = document.createElement("option");
       var newoption = document.createElement("option");
       var thisnewtextnode = configjumper[16];
       var thisnewtextnode = configrevisionjumper[16];
       var newoptiontext = document.createTextNode(thisnewtextnode);
       var newoptiontext = document.createTextNode(thisnewtextnode);
       currentmovetodiffid.appendChild(newoption);
       currentmovetodiffid.appendChild(newoption);
Line 278: Line 295:
           var revisionlimit = 'a';
           var revisionlimit = 'a';
           while(revisionlimit.search(/\D/)!=-1) {
           while(revisionlimit.search(/\D/)!=-1) {
             revisionlimit = prompt(configjumper[17],'50');
             revisionlimit = prompt(configrevisionjumper[17],'50');
           }
           }
           if (revisionlimit>499) revisionlimit = 499;
           if (revisionlimit>499) revisionlimit = 499;
Line 379: Line 396:
             }
             }
           } else if (i==(handt+1)) {
           } else if (i==(handt+1)) {
             var getjumptime = prompt(configjumper[18], '1a 12m 30d 24h');
             var getjumptime = prompt(configrevisionjumper[18], '1a 12m 30d 24h');
             var newregularexp = /(\d*)(\D*)(\d*)?(\D*)?(\d*)?(\D*)?(\d*)?(\D*)?/;
             var newregularexp = /(\d*)(\D*)(\d*)?(\D*)?(\d*)?(\D*)?(\d*)?(\D*)?/;
             var regexprevision = newregularexp.exec(getjumptime);
             var regexprevision = newregularexp.exec(getjumptime);
Line 493: Line 510:
         var lasttime = false;
         var lasttime = false;
         while(!lasttime){
         while(!lasttime){
           var getjumptime = prompt(configjumper[19], actualyear+'-'+actualmonth+'-'+actualday+' 00:00');
           var getjumptime = prompt(configrevisionjumper[19], actualyear+'-'+actualmonth+'-'+actualday+' 00:00');
           var lasttime = getjumptime.match(/([^\-]*)\-([^\-]*)\-(\S*)\s?([^\:]*)?\:?([^\b]*)?/);
           var lasttime = getjumptime.match(/([^\-]*)\-([^\-]*)\-(\S*)\s?([^\:]*)?\:?([^\b]*)?/);
           lastyear = RegExp.$1;
           lastyear = RegExp.$1;
Line 575: Line 592:
         }
         }
         if(type==0) {
         if(type==0) {
          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&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';
             req.open("GET", text, false);
            var req = newRequest();
             req.send("");
             req.open("GET", text, true);
            var firstrevision = 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) {
 
             if(getoldid && !UrlParameters["diff"]) {
             if(getoldid && !UrlParameters["diff"]) {
               location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&oldid='+firstrevision;
               location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&oldid='+firstrevision;
Line 585: Line 610:
               location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&diff='+permanentid+'&oldid='+firstrevision;
               location.href=mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgPageName')+'&diff='+permanentid+'&oldid='+firstrevision;
             }
             }
          }
            }
         } else if (type==1) {
         } else if (type==1) {
           if(getoldid && !UrlParameters["diff"]) {
           if(getoldid && !UrlParameters["diff"]) {