<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.battlestarwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sentient</id>
	<title>Battlestar Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.battlestarwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sentient"/>
	<link rel="alternate" type="text/html" href="https://en.battlestarwiki.org/Special:Contributions/Sentient"/>
	<updated>2026-05-14T09:48:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://en.battlestarwiki.org/w/index.php?title=User:Sentient/battlestar.js&amp;diff=187162</id>
		<title>User:Sentient/battlestar.js</title>
		<link rel="alternate" type="text/html" href="https://en.battlestarwiki.org/w/index.php?title=User:Sentient/battlestar.js&amp;diff=187162"/>
		<updated>2009-09-15T21:10:08Z</updated>

		<summary type="html">&lt;p&gt;Sentient: Created page with &amp;#039;/* Timetravel, version [0.2.0] Documentation: Wikipedia:WikiProject User scripts/Scripts/TimeTraveller   Notes: * Does not take into account: ** Old versions of templates, images…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Timetravel, version [0.2.0]&lt;br /&gt;
Documentation: Wikipedia:WikiProject User scripts/Scripts/TimeTraveller&lt;br /&gt;
 &lt;br /&gt;
Notes:&lt;br /&gt;
* Does not take into account:&lt;br /&gt;
** Old versions of templates, images&lt;br /&gt;
** Moved page titles&lt;br /&gt;
** Renamed users&lt;br /&gt;
** Time-sensitive magic words&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
//to be localised&lt;br /&gt;
tt_currentrevision = &#039;Current revision&#039;;&lt;br /&gt;
tt_history=&#039;History&#039;;&lt;br /&gt;
 &lt;br /&gt;
//&lt;br /&gt;
// this code deals with the first access to an old page&lt;br /&gt;
// We have the revision id, but not the timetravel timestamp --&amp;gt; need to find it and set tt_timetravel&lt;br /&gt;
//&lt;br /&gt;
if(queryString(&#039;oldid&#039;) &amp;amp;&amp;amp; !queryString(&#039;timetravel&#039;) &amp;amp;&amp;amp; !queryString(&#039;diff&#039;) &amp;amp;&amp;amp; wgAction == &#039;view&#039;)  addOnloadHook(addTimetravelButton)&lt;br /&gt;
function addTimetravelButton() {&lt;br /&gt;
 var url = wgServer + wgScriptPath + &#039;/api.php?maxage=300&amp;amp;smaxage=300&amp;amp;action=query&amp;amp;prop=revisions&amp;amp;rvprop=timestamp|ids&amp;amp;format=json&amp;amp;callback=addTimetravelCB&amp;amp;revids=&#039; + queryString(&#039;oldid&#039;);&lt;br /&gt;
 importScriptURI(url);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
var tt_timetravel=false;&lt;br /&gt;
function addTimetravelCB(obj) {&lt;br /&gt;
 if(!obj[&#039;query&#039;] || !obj[&#039;query&#039;][&#039;pages&#039;] || !obj[&#039;query&#039;][&#039;pages&#039;][wgArticleId]) return&lt;br /&gt;
 var rev = obj[&#039;query&#039;][&#039;pages&#039;][wgArticleId][&#039;revisions&#039;];&lt;br /&gt;
 var ts =&#039;&#039;;&lt;br /&gt;
 for(var i in rev) {&lt;br /&gt;
   if(rev[i][&#039;revid&#039;] == queryString(&#039;oldid&#039;)) {&lt;br /&gt;
     ts = rev[i][&#039;timestamp&#039;];&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 tt_timetravel=ts;&lt;br /&gt;
 engageTimetravelLinks();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//&lt;br /&gt;
// this code deals with the old pages accessed from another old one&lt;br /&gt;
// We thus have the tt_timetravel parameter&lt;br /&gt;
//&lt;br /&gt;
if(queryString(&#039;timetravel&#039;) &amp;amp;&amp;amp; wgAction == &#039;view&#039;) addOnloadHook(engageTimetravelLinks)&lt;br /&gt;
 &lt;br /&gt;
// this is the routine called by the 2 previous cases&lt;br /&gt;
 &lt;br /&gt;
function engageTimetravelLinks() {&lt;br /&gt;
 if(!tt_timetravel) tt_timetravel=queryString(&#039;timetravel&#039;);&lt;br /&gt;
 appendCSS(&#039;a.timetravel { color:#00ff00 !important;} a.ttused {color:#ff0000 !important;}&#039;);&lt;br /&gt;
 &lt;br /&gt;
 engageTT2 (document.getElementById(&#039;bodyContent&#039;) || document.getElementById(&#039;content&#039;) || document.body, &amp;quot;A&amp;quot;);&lt;br /&gt;
 engageTT2 (document.getElementById(&#039;p-cactions&#039;), &amp;quot;B&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function engageTT2 (docobj, tag) {&lt;br /&gt;
 if (!docobj) return;&lt;br /&gt;
 var a = docobj.getElementsByTagName(&#039;a&#039;);&lt;br /&gt;
 &lt;br /&gt;
 for(var i=0;i&amp;lt;a.length;i++) {&lt;br /&gt;
   if (tag==&#039;B&#039; &amp;amp;&amp;amp; a[i].innerHTML==tt_history) {&lt;br /&gt;
      a[i].href=a[i].href + &#039;&amp;amp;offset=&#039; + tt_timetravel.replace(/[^0-9]/g,&amp;quot;&amp;quot;);&lt;br /&gt;
      continue&lt;br /&gt;
   }&lt;br /&gt;
   // Exclude: catlinks, extiw/external/new/image, diff/oldid/action, special, http/uri, media?, anchors?, imagemap?&lt;br /&gt;
   if(a[i].className.search(/(extiw|external|new|image)/ig) != -1) continue&lt;br /&gt;
   if(a[i].href.search(/(\/wiki\/(Category\:|Special\:)|diff\=|oldid\=|action\=|Special\:Cite)/ig) != -1) continue&lt;br /&gt;
   if(a[i].innerHTML==tt_currentrevision) continue;&lt;br /&gt;
 &lt;br /&gt;
   var link = a[i].href;&lt;br /&gt;
   link = link.replace(wgServer + wgArticlePath.replace(/\$1/,&#039;&#039;),&#039;&#039;);&lt;br /&gt;
   if(link.indexOf(&#039;#&#039;) != -1) link = link.substr(0,link.indexOf(&#039;#&#039;));&lt;br /&gt;
   if(link.search(/(http|https|file|javascript)\:/ig) == 0) continue&lt;br /&gt;
 &lt;br /&gt;
   a[i].onmouseover=timetravel;&lt;br /&gt;
//    a[i].className += &#039; timetravel&#039;;&lt;br /&gt;
   a[i].id = &#039;ttlink-&#039; + tag + i;&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//&lt;br /&gt;
// this code deals with the mouseOver an anchor&lt;br /&gt;
//&lt;br /&gt;
var tt_anchor, tt_id; // this may create a problem if several mouseover are fired before they can be fully handled&lt;br /&gt;
function timetravel(e) {&lt;br /&gt;
 //first, let&#039;s find the anchor&lt;br /&gt;
 var targ;&lt;br /&gt;
 if (!e) var e = window.event;&lt;br /&gt;
 if (e.target) targ = e.target;&lt;br /&gt;
 else if (e.srcElement) targ = e.srcElement;&lt;br /&gt;
 if (targ.nodeType == 3) // defeat Safari bug&lt;br /&gt;
    targ = targ.parentNode;&lt;br /&gt;
 var a = targ;&lt;br /&gt;
 var link = a.href;&lt;br /&gt;
 &lt;br /&gt;
 // no need to do anything else if it already has timetravel&lt;br /&gt;
 if (link.indexOf(&#039;timetravel=&#039;) != -1) {&lt;br /&gt;
   return&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // block the href until updated&lt;br /&gt;
 a.className += &#039; ttused&#039;;&lt;br /&gt;
 if (link.indexOf(&#039;javascript:void(&amp;quot;&#039;) !=-1) { // this happens when the call back does not happen! Remove it.&lt;br /&gt;
   link=link.substr( (&#039;javascript:void(&amp;quot;&#039;).length, link.length- (&#039;javascript:void(&amp;quot;&#039;).length- (&#039;&amp;quot;);&#039;).length);&lt;br /&gt;
 } else {&lt;br /&gt;
   a.href = &#039;javascript:void(&amp;quot;&#039; + a.href + &#039;&amp;quot;);&#039;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //set the global variables&lt;br /&gt;
 link = link.replace(wgServer + wgArticlePath.replace(/\$1/,&#039;&#039;),&#039;&#039;);&lt;br /&gt;
 link = link.replace (/_/g, &#039; &#039;);&lt;br /&gt;
 if(link.indexOf(&#039;#&#039;) != -1) {&lt;br /&gt;
      tt_anchor=link.substr(link.indexOf(&#039;#&#039;))&lt;br /&gt;
      link = link.substr(0,link.indexOf(&#039;#&#039;)); &lt;br /&gt;
 } else {tt_anchor=&#039;&#039;};&lt;br /&gt;
 tt_id=a.id;&lt;br /&gt;
 &lt;br /&gt;
 //call the API&lt;br /&gt;
 var url = wgServer + wgScriptPath + &#039;/api.php?maxage=300&amp;amp;smaxage=300&amp;amp;action=query&amp;amp;prop=revisions&amp;amp;&amp;amp;rvprop=ids&amp;amp;rvlimit=1&amp;amp;rvstart=&#039; + tt_timetravel + &#039;&amp;amp;format=json&amp;amp;callback=timetravelCB&amp;amp;titles=&#039; + encodeURIComponent(decodeURIComponent(link));&lt;br /&gt;
 url+= &#039;&amp;amp;rnd=&#039; + Math.random() // add a random element to make sure it is called&lt;br /&gt;
 importScriptURI(url);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function timetravelCB(obj) {&lt;br /&gt;
 var a = document.getElementById(tt_id);&lt;br /&gt;
 &lt;br /&gt;
 if(!obj[&#039;query&#039;] || !obj[&#039;query&#039;][&#039;pages&#039;]) return&lt;br /&gt;
 var pages = obj[&#039;query&#039;][&#039;pages&#039;];&lt;br /&gt;
 var rev;&lt;br /&gt;
 var title = &#039;&#039;;&lt;br /&gt;
 for(var i in pages) {&lt;br /&gt;
   rev = pages[i][&#039;revisions&#039;];&lt;br /&gt;
   title = pages[i][&#039;title&#039;];&lt;br /&gt;
 }&lt;br /&gt;
 if(!rev) {&lt;br /&gt;
   //unblock the link&lt;br /&gt;
   url=a.href.substr( (&#039;javascript:void(&amp;quot;&#039;).length, a.href.length- (&#039;javascript:void(&amp;quot;&#039;).length- (&#039;&amp;quot;);&#039;).length);&lt;br /&gt;
   a.href=url;&lt;br /&gt;
   a.className =&#039;&#039;;&lt;br /&gt;
//    alert(&#039;No such page, or no revisions found that old.\n&#039;);&lt;br /&gt;
 } else {&lt;br /&gt;
   a.onmouseover=&#039;&#039;; // no need to fire this anymore&lt;br /&gt;
   var id = 0;&lt;br /&gt;
   for(var i in rev) {&lt;br /&gt;
     id = rev[i][&#039;revid&#039;];&lt;br /&gt;
   }&lt;br /&gt;
   if(id != 0) {&lt;br /&gt;
     var url = wgServer + wgScript + &#039;?title=&#039; + encodeURIComponent(title) + &#039;&amp;amp;oldid=&#039; + id + &#039;&amp;amp;timetravel=&#039; + tt_timetravel +tt_anchor ;&lt;br /&gt;
     a.href = url;&lt;br /&gt;
     a.className =&#039;&#039;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function queryString(p) {&lt;br /&gt;
 var re = RegExp(&#039;[&amp;amp;?#]&#039; + p + &#039;=([^&amp;amp;#]*)&#039;);&lt;br /&gt;
 var matches;&lt;br /&gt;
 if (matches = re.exec(document.location)) {&lt;br /&gt;
   try { &lt;br /&gt;
     return decodeURI(matches[1]);&lt;br /&gt;
   } catch (e) {&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 return null; &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//&lt;br /&gt;
// Add links to timestamps in talk pages&lt;br /&gt;
//&lt;br /&gt;
 &lt;br /&gt;
 if (wgAction == &#039;view&#039;)  addOnloadHook(addDateLinks);&lt;br /&gt;
 &lt;br /&gt;
 function addDateLinks() {&lt;br /&gt;
    var newContent = document.getElementById(&#039;bodyContent&#039;);&lt;br /&gt;
    if (! newContent || ! newContent.innerHTML || newContent.innerHTML==&#039;&#039;) return;&lt;br /&gt;
    newContent=newContent.innerHTML;&lt;br /&gt;
 &lt;br /&gt;
    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;&lt;br /&gt;
    var dates= newContent.match(tt_regDate);&lt;br /&gt;
    if (!dates || ! dates.length) return;&lt;br /&gt;
    for (var j=0;j&amp;lt;dates.length;j++) {&lt;br /&gt;
       tt_regDate.lastIndex=0;&lt;br /&gt;
       var a = tt_regDate.exec(dates[j]);&lt;br /&gt;
       if (!a) continue;&lt;br /&gt;
       var dateLink=a[5] +&#039;-&#039;+ tt_2(a[4]) +&#039;-&#039;+ tt_2(a[3]) +&#039;T&#039;+ tt_2(a[1]) +&#039;:&#039;+ tt_2(a[2]) + &#039;:59Z&#039;;&lt;br /&gt;
       dateLink=&amp;quot;&amp;lt;a href=javascript:void(&#039;&amp;quot; + dateLink +&amp;quot;&#039;) id=&#039;&amp;quot; + dateLink +&amp;quot;&#039; onmouseover=&#039;getURLofThisPageFor(&amp;quot;+ &#039;&amp;quot;&#039;+dateLink+&#039;&amp;quot;&#039;+ &amp;quot;)&#039;&amp;gt;&amp;quot;+ dates[j]+ &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
       var r= dates[j].replace(&amp;quot;(&amp;quot;,&amp;quot;\\(&amp;quot;);&lt;br /&gt;
       r = r.replace(&amp;quot;)&amp;quot;,&amp;quot;\\)&amp;quot;);&lt;br /&gt;
       r = new RegExp(r, &amp;quot;g&amp;quot;);&lt;br /&gt;
       newContent=newContent.replace(r, dateLink);&lt;br /&gt;
    }&lt;br /&gt;
   document.getElementById(&#039;bodyContent&#039;).innerHTML=newContent&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
//&lt;br /&gt;
// this code deals with the mouseOver an anchor&lt;br /&gt;
//&lt;br /&gt;
var tt_tentativeDate; &lt;br /&gt;
function getURLofThisPageFor(aDate) {&lt;br /&gt;
     //first, let&#039;s find the anchor&lt;br /&gt;
     var a=document.getElementById(aDate);&lt;br /&gt;
     if (!a) return;&lt;br /&gt;
 &lt;br /&gt;
     // no need to do anything else if it already has timetravel&lt;br /&gt;
     if (a.href.indexOf(&#039;timetravel=&#039;) != -1) return;&lt;br /&gt;
 &lt;br /&gt;
    //set the global variables&lt;br /&gt;
    tt_tentativeDate=aDate;&lt;br /&gt;
 &lt;br /&gt;
    //call the API&lt;br /&gt;
    var pageName= wgPageName.replace (/()\/Archive_[\d]*/,&#039;$1&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var url = wgServer + wgScriptPath + &#039;/api.php?maxage=300&amp;amp;smaxage=300&amp;amp;action=query&amp;amp;prop=revisions&amp;amp;&amp;amp;rvprop=ids&amp;amp;rvlimit=1&amp;amp;rvstart=&#039; + aDate + &#039;&amp;amp;format=json&amp;amp;callback=getURLofThisPageCB&amp;amp;titles=&#039; + encodeURIComponent(decodeURIComponent(pageName));&lt;br /&gt;
    url+= &#039;&amp;amp;rnd=&#039; + Math.random() // add a random element to make sure it is called&lt;br /&gt;
    importScriptURI(url);&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
function getURLofThisPageCB (obj) {&lt;br /&gt;
    if (!tt_tentativeDate) return;&lt;br /&gt;
    var a = document.getElementById(tt_tentativeDate);&lt;br /&gt;
    if (!a) return;&lt;br /&gt;
 &lt;br /&gt;
    if(!obj[&#039;query&#039;] || !obj[&#039;query&#039;][&#039;pages&#039;]) return&lt;br /&gt;
    var pages = obj[&#039;query&#039;][&#039;pages&#039;];&lt;br /&gt;
    var rev;&lt;br /&gt;
    var title=&#039;&#039;;&lt;br /&gt;
    for (var i in pages) {&lt;br /&gt;
      rev = pages[i][&#039;revisions&#039;];&lt;br /&gt;
      title = pages[i][&#039;title&#039;];&lt;br /&gt;
    };&lt;br /&gt;
    if(!rev) {&lt;br /&gt;
      //unblock the link&lt;br /&gt;
      url=a.href.substr( (&#039;javascript:void(&amp;quot;&#039;).length, a.href.length- (&#039;javascript:void(&amp;quot;&#039;).length- (&#039;&amp;quot;);&#039;).length);&lt;br /&gt;
      a.href=url;&lt;br /&gt;
      a.className =&#039;&#039;;&lt;br /&gt;
   //    alert(&#039;No such page, or no revisions found that old.\n&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      a.onmouseover=&#039;&#039;; // no need to fire this anymore&lt;br /&gt;
      var id = 0;&lt;br /&gt;
      for (var i=0;i&amp;lt;rev.length;i++)  {&lt;br /&gt;
        id = rev[i][&#039;revid&#039;];&lt;br /&gt;
      };&lt;br /&gt;
      title=title.replace (/()\/Archive_[\d]*/,&#039;$1&#039;);&lt;br /&gt;
      if(id != 0) {&lt;br /&gt;
        var url = wgServer + wgScript + &#039;?title=&#039; + encodeURIComponent(title) + &#039;&amp;amp;oldid=&#039; + id + &#039;&amp;amp;timetravel=&#039; + tt_tentativeDate ;&lt;br /&gt;
        a.href = url;&lt;br /&gt;
        a.className =&#039;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
function tt_2 (s) {&lt;br /&gt;
 switch (s) {&lt;br /&gt;
   case &#039;1&#039;: return &#039;01&#039;;&lt;br /&gt;
   case &#039;2&#039;: return &#039;02&#039;;&lt;br /&gt;
   case &#039;3&#039;: return &#039;03&#039;;&lt;br /&gt;
   case &#039;4&#039;: return &#039;04&#039;;&lt;br /&gt;
   case &#039;5&#039;: return &#039;05&#039;;&lt;br /&gt;
   case &#039;6&#039;: return &#039;06&#039;;&lt;br /&gt;
   case &#039;7&#039;: return &#039;07&#039;;&lt;br /&gt;
   case &#039;8&#039;: return &#039;08&#039;;&lt;br /&gt;
   case &#039;9&#039;: return &#039;09&#039;;&lt;br /&gt;
   case &#039;January&#039;: return &#039;01&#039;;&lt;br /&gt;
   case &#039;February&#039;: return &#039;02&#039;;&lt;br /&gt;
   case &#039;March&#039;: return &#039;03&#039;;&lt;br /&gt;
   case &#039;April&#039;: return &#039;04&#039;;&lt;br /&gt;
   case &#039;May&#039;: return &#039;05&#039;;&lt;br /&gt;
   case &#039;June&#039;: return &#039;06&#039;;&lt;br /&gt;
   case &#039;July&#039;: return &#039;07&#039;;&lt;br /&gt;
   case &#039;August&#039;: return &#039;08&#039;;&lt;br /&gt;
   case &#039;September&#039;: return &#039;09&#039;;&lt;br /&gt;
   case &#039;October&#039;: return &#039;10&#039;;&lt;br /&gt;
   case &#039;November&#039;: return &#039;11&#039;;&lt;br /&gt;
   case &#039;December&#039;: return &#039;12&#039;;&lt;br /&gt;
   case &#039;Jan&#039;: return &#039;01&#039;;&lt;br /&gt;
   case &#039;Feb&#039;: return &#039;02&#039;;&lt;br /&gt;
   case &#039;Mar&#039;: return &#039;03&#039;;&lt;br /&gt;
   case &#039;Apr&#039;: return &#039;04&#039;;&lt;br /&gt;
   case &#039;May&#039;: return &#039;05&#039;;&lt;br /&gt;
   case &#039;Jun&#039;: return &#039;06&#039;;&lt;br /&gt;
   case &#039;Jul&#039;: return &#039;07&#039;;&lt;br /&gt;
   case &#039;Aug&#039;: return &#039;08&#039;;&lt;br /&gt;
   case &#039;Sep&#039;: return &#039;09&#039;;&lt;br /&gt;
   case &#039;Oct&#039;: return &#039;10&#039;;&lt;br /&gt;
   case &#039;Nov&#039;: return &#039;11&#039;;&lt;br /&gt;
   case &#039;Dec&#039;: return &#039;12&#039;;&lt;br /&gt;
   default: return s&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Sentient</name></author>
	</entry>
</feed>