Tu banner alternativo

Wikipedia:WikiProject User scripts/Scripts/TimeTraveller.js

In this article we will discuss the topic of Wikipedia:WikiProject User scripts/Scripts/TimeTraveller.js, a topic of great relevance and interest today. Wikipedia:WikiProject User scripts/Scripts/TimeTraveller.js has generated numerous debates and controversies, as well as aroused the interest of experts and fans of different disciplines. In this sense, it is important to analyze in detail all the aspects and perspectives related to Wikipedia:WikiProject User scripts/Scripts/TimeTraveller.js, to fully understand its impact and scope in today's society. Throughout this article, we will explore different points of view, relevant data and possible future implications of Wikipedia:WikiProject User scripts/Scripts/TimeTraveller.js, with the aim of offering a complete and enriching vision on this important topic.

Tu banner alternativo
/* Timetravel, version 
Documentation: Wikipedia:WikiProject User scripts/Scripts/TimeTraveller

Notes:
* Does not take into account:
** Old versions of templates, images
** Moved page titles
** Renamed users
** Time-sensitive magic words
*/

//to be localised
tt_currentrevision = 'Current revision';
tt_history='History';

//
// this code deals with the first access to an old page
// We have the revision id, but not the timetravel timestamp --> need to find it and set tt_timetravel
//
if(queryString('oldid') && !queryString('timetravel') && !queryString('diff') && mw.config.get('wgAction') == 'view')  addOnloadHook(addTimetravelButton)
function addTimetravelButton() {
 var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?maxage=300&smaxage=300&action=query&prop=revisions&rvprop=timestamp|ids&format=json&callback=addTimetravelCB&revids=' + queryString('oldid');
 mw.loader.load(url);
}

var tt_timetravel=false;
function addTimetravelCB(obj) {
 if(!obj || !obj || !obj) return
 var rev = obj;
 var ts ='';
 for(var i in rev) {
   if(rev == queryString('oldid')) {
     ts = rev;
   }
 }
 tt_timetravel=ts;
 engageTimetravelLinks();
}

//
// this code deals with the old pages accessed from another old one
// We thus have the tt_timetravel parameter
//
if(queryString('timetravel') && mw.config.get('wgAction') == 'view') addOnloadHook(engageTimetravelLinks)

// this is the routine called by the 2 previous cases

function engageTimetravelLinks() {
 if(!tt_timetravel) tt_timetravel=queryString('timetravel');
 appendCSS('a.timetravel { color:#00ff00 !important;} a.ttused {color:#ff0000 !important;}');

 engageTT2 (document.getElementById('bodyContent') || document.getElementById('content') || document.body, "A");
 engageTT2 (document.getElementById('p-cactions'), "B");
}

function engageTT2 (docobj, tag) {
 if (!docobj) return;
 var a = docobj.getElementsByTagName('a');

 for(var i=0;i<a.length;i++) {
   if (tag=='B' && a.innerHTML==tt_history) {
      a.href=a.href + '&offset=' + tt_timetravel.replace(//g,"");
      continue
   }
   // Exclude: catlinks, extiw/external/new/image, diff/oldid/action, special, http/uri, media?, anchors?, imagemap?
   if(a.className.search(/(extiw|external|new|image)/ig) != -1) continue
   if(a.href.search(/(\/wiki\/(Category\:|Special\:)|diff\=|oldid\=|action\=|Special\:Cite)/ig) != -1) continue
   if(a.innerHTML==tt_currentrevision) continue;

   var link = a.href;
   link = link.replace(mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace(/\$1/,''),'');
   if(link.indexOf('#') != -1) link = link.substr(0,link.indexOf('#'));
   if(link.search(/(http|https|file|javascript)\:/ig) == 0) continue

   a.onmouseover=timetravel;
//    a.className += ' timetravel';
   a.id = 'ttlink-' + tag + i;
 }
}

//
// this code deals with the mouseOver an anchor
//
var tt_anchor, tt_id; // this may create a problem if several mouseover are fired before they can be fully handled
function timetravel(e) {
 //first, let's find the anchor
 var targ;
 if (!e) var e = window.event;
 if (e.target) targ = e.target;
 else if (e.srcElement) targ = e.srcElement;
 if (targ.nodeType == 3) // defeat Safari bug
    targ = targ.parentNode;
 var a = targ;
 var link = a.href;

 // no need to do anything else if it already has timetravel
 if (link.indexOf('timetravel=') != -1) {
   return
 }

 // block the href until updated
 a.className += ' ttused';
 if (link.indexOf('javascript:void("') !=-1) { // this happens when the call back does not happen! Remove it.
   link=link.substr( ('javascript:void("').length, link.length- ('javascript:void("').length- ('");').length);
 } else {
   a.href = 'javascript:void("' + a.href + '");';
 }

 //set the global variables
 link = link.replace(mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace(/\$1/,''),'');
 link = link.replace (/_/g, ' ');
 if(link.indexOf('#') != -1) {
      tt_anchor=link.substr(link.indexOf('#'))
      link = link.substr(0,link.indexOf('#')); 
 } else {tt_anchor=''};
 tt_id=a.id;

 //call the API
 var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?maxage=300&smaxage=300&action=query&prop=revisions&&rvprop=ids&rvlimit=1&rvstart=' + tt_timetravel + '&format=json&callback=timetravelCB&titles=' + encodeURIComponent(decodeURIComponent(link));
 url+= '&rnd=' + Math.random() // add a random element to make sure it is called
 mw.loader.load(url);
}

function timetravelCB(obj) {
 var a = document.getElementById(tt_id);

 if(!obj || !obj) return
 var pages = obj;
 var rev;
 var title = '';
 for(var i in pages) {
   rev = pages;
   title = pages;
 }
 if(!rev) {
   //unblock the link
   url=a.href.substr( ('javascript:void("').length, a.href.length- ('javascript:void("').length- ('");').length);
   a.href=url;
   a.className ='';
//    alert('No such page, or no revisions found that old.\n');
 } else {
   a.onmouseover=''; // no need to fire this anymore
   var id = 0;
   for(var i in rev) {
     id = rev;
   }
   if(id != 0) {
     var url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + encodeURIComponent(title) + '&oldid=' + id + '&timetravel=' + tt_timetravel +tt_anchor ;
     a.href = url;
     a.className ='';
   }
 }
}

function queryString(p) {
 var re = RegExp('' + p + '=(*)');
 var matches;
 if (matches = re.exec(document.location)) {
   try { 
     return decodeURI(matches);
   } catch (e) {
   }
 }
 return null; 
}

//
// Add links to timestamps in talk pages
//

 if (mw.config.get('wgAction') == 'view')  addOnloadHook(addDateLinks);

 function addDateLinks() {
    var newContent = document.getElementById('bodyContent');
    if (! newContent || ! newContent.innerHTML || newContent.innerHTML=='') return;
    newContent=newContent.innerHTML;

    var tt_regDate= /(\d?\d):(\d\d), (\d?\d) (January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d\d\d\d) \(UTC\)/g;
    var dates= newContent.match(tt_regDate);
    if (!dates || ! dates.length) return;
    for (var j=0;j<dates.length;j++) {
       tt_regDate.lastIndex=0;
       var a = tt_regDate.exec(dates);
       if (!a) continue;
       var dateLink=a +'-'+ tt_2(a) +'-'+ tt_2(a) +'T'+ tt_2(a) +':'+ tt_2(a) + ':59Z';
       dateLink="<a href=javascript:void('" + dateLink +"') id='" + dateLink +"' onmouseover='getURLofThisPageFor("+ '"'+dateLink+'"'+ ")'>"+ dates+ "</a>";

       var r= dates.replace("(","\\(");
       r = r.replace(")","\\)");
       r = new RegExp(r, "g");
       newContent=newContent.replace(r, dateLink);
    }
   document.getElementById('bodyContent').innerHTML=newContent
 };
 
//
// this code deals with the mouseOver an anchor
//
var tt_tentativeDate; 
function getURLofThisPageFor(aDate) {
     //first, let's find the anchor
     var a=document.getElementById(aDate);
     if (!a) return;

     // no need to do anything else if it already has timetravel
     if (a.href.indexOf('timetravel=') != -1) return;

    //set the global variables
    tt_tentativeDate=aDate;

    //call the API
    var pageName= mw.config.get('wgPageName').replace (/()\/Archive_*/,'$1');

    var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?maxage=300&smaxage=300&action=query&prop=revisions&&rvprop=ids&rvlimit=1&rvstart=' + aDate + '&format=json&callback=getURLofThisPageCB&titles=' + encodeURIComponent(decodeURIComponent(pageName));
    url+= '&rnd=' + Math.random() // add a random element to make sure it is called
    mw.loader.load(url);
};

function getURLofThisPageCB (obj) {
    if (!tt_tentativeDate) return;
    var a = document.getElementById(tt_tentativeDate);
    if (!a) return;

    if(!obj || !obj) return
    var pages = obj;
    var rev;
    var title='';
    for (var i in pages) {
      rev = pages;
      title = pages;
    };
    if(!rev) {
      //unblock the link
      url=a.href.substr( ('javascript:void("').length, a.href.length- ('javascript:void("').length- ('");').length);
      a.href=url;
      a.className ='';
   //    alert('No such page, or no revisions found that old.\n');
    } else {
      a.onmouseover=''; // no need to fire this anymore
      var id = 0;
      for (var i=0;i<rev.length;i++)  {
        id = rev;
      };
      title=title.replace (/()\/Archive_*/,'$1');
      if(id != 0) {
        var url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + encodeURIComponent(title) + '&oldid=' + id + '&timetravel=' + tt_tentativeDate ;
        a.href = url;
        a.className ='';
      }
    }
};

function tt_2 (s) {
 switch (s) {
   case '1': return '01';
   case '2': return '02';
   case '3': return '03';
   case '4': return '04';
   case '5': return '05';
   case '6': return '06';
   case '7': return '07';
   case '8': return '08';
   case '9': return '09';
   case 'January': return '01';
   case 'February': return '02';
   case 'March': return '03';
   case 'April': return '04';
   case 'May': return '05';
   case 'June': return '06';
   case 'July': return '07';
   case 'August': return '08';
   case 'September': return '09';
   case 'October': return '10';
   case 'November': return '11';
   case 'December': return '12';
   case 'Jan': return '01';
   case 'Feb': return '02';
   case 'Mar': return '03';
   case 'Apr': return '04';
   case 'May': return '05';
   case 'Jun': return '06';
   case 'Jul': return '07';
   case 'Aug': return '08';
   case 'Sep': return '09';
   case 'Oct': return '10';
   case 'Nov': return '11';
   case 'Dec': return '12';
   default: return s
 }
}