User:John Vandenberg/since.js
//
if( typeof( SinceConfig ) == 'undefined' ) {
SinceConfig = function() {};
}
if( typeof( SinceConfig.historyRevisions ) == 'undefined' ) {
SinceConfig.historyRevisions = 0;
}
if( typeof( SinceConfig.updateWatchlist ) == 'undefined' ) {
SinceConfig.updateWatchlist = 0;
}
if( typeof( SinceConfig.growthRate ) == 'undefined' ) {
SinceConfig.growthRate = 1000;
}
if( typeof( SinceConfig.editWatchlistTalkLinks ) == 'undefined' ) {
SinceConfig.editWatchlistTalkLinks = 0;
}
function addSinceTab() {
if (window.location.href.indexOf("&action=history&gotosince=true")!=-1) {
do_since_I_last_edited()
}
else if (wgCanonicalNamespace != "Special") {
url = "/w/index.php?title="+wgPageName+"&action=history&gotosince=true";
if (SinceConfig.historyRevisions)
url += '&limit=' + SinceConfig.historyRevisions;
addPortletLink("p-cactions", url, 'since', '', "since");
}
}
function historyNextPageURL() {
var historyNav = document.getElementById("historysubmit").parentNode.nextSibling;
for (i=0;i<16;i++) {
if (historyNav.tagName && historyNav.tagName == 'A') {
if (historyNav.innerHTML.indexOf('next') != -1) {
return historyNav.href;
}
}
if (historyNav.nextSibling) {
historyNav = historyNav.nextSibling;
}
else {
return;
}
}
}
function do_since_I_last_edited() {
var csub=document.getElementById("contentSub");
var msg=document.createElement("p");
msg.appendChild(document.createTextNode
("Parsing history... please wait..."));
msg.className="error";
csub.insertBefore(msg, csub.firstChild)
var hists=document.getElementById("pagehistory").getElementsByTagName('li');
for (n=0;n
if (hists[n].getElementsByTagName("span")[0].getElementsByTagName('a')[0].innerHTML==wgUserName) {
document.location=hists[n].childNodes[1].href;
return;
}
}
var url = historyNextPageURL();
var offset;
var limit;
if (url) {
offset = /offset=([0-9]*)/.exec(url);
limit = /limit=([0-9]*)/.exec(url);
}
if (offset) offset = offset[1];
if (limit) limit = limit[1];
text = "You have not edited this page";
if (!url) {
text += ' since it was created!';
}
else if (limit) {
text += ' in the last ' + limit + ' revisions.';
}
else {
text += ' (recently)!';
}
msg.replaceChild(document.createTextNode(text), msg.firstChild);
if (!url) return;
if (!limit) limit = SinceConfig.growthRate;
msg.appendChild(document.createTextNode(' Click '));
var n = document.createElement("A");
n.href = url;
n.innerHTML = 'next';
msg.appendChild(n);
var url = wgServer + '/w/index.php?title=' + wgPageName +
'&action=history&gotosince=true' +
'&offset='+offset;
msg.appendChild(document.createTextNode(', or increase search to '));
var lookharderA = document.createElement("A");
lookharderA.href = url + '&limit=' + (limit * 2);
lookharderA.innerHTML = (limit * 2);
msg.appendChild(lookharderA);
msg.appendChild(document.createTextNode (" or "));
lookharderA = document.createElement("A");
lookharderA.href = url + '&limit=' + (limit * 4);
lookharderA.innerHTML = (limit * 4);
msg.appendChild(lookharderA);
msg.appendChild(document.createTextNode(' revisions.'));
}
$(addSinceTab);
function addSinceWatchlistLinks()
{
if (wgCanonicalNamespace == 'Special' &&
wgCanonicalSpecialPageName == 'Watchlist' &&
SinceConfig.updateWatchlist == 1) {
var bodyContent = document.getElementById('bodyContent');
var as = bodyContent.getElementsByTagName('a');
var currentNode;
var k = 0;
var text;
var tn;
var link;
for (n=0; n < as.length; n++) {
currentNode = as[n];
text=currentNode.innerHTML;
if (text == 'hist' || text == 'Page history' || text == 'History') {
k++;
tn = document.createTextNode(text == 'History' ? ' | ' : '; ');
link = document.createElement('a');
link.href = currentNode.href + '&gotosince=true';
if (SinceConfig.historyRevisions)
link.href += '&limit=' + SinceConfig.historyRevisions;
link.appendChild(document.createTextNode(text == 'History' ? 'Since' : 'since'));
currentNode.parentNode.insertBefore(link , currentNode);
/* as is extended when we add a "A" element, so skip it */
n++;
currentNode.parentNode.insertBefore(tn , currentNode);
if (text == 'Page history') {
currentNode.innerHTML = 'hist';
}
if (SinceConfig.editWatchlistTalkLinks && text == 'History') {
currentNode.parentNode.appendChild( document.createTextNode( ' (' ) );
// Move the Talk: link
var mn = link.previousSibling.previousSibling;
currentNode.parentNode.appendChild( mn );
currentNode.parentNode.removeChild( link.previousSibling );
currentNode.parentNode.appendChild( document.createTextNode( ': ' ) );
// Create a Talk: 'History' link
var history = document.createElement('a');
text = currentNode.href;
history.href = text.replace(/title=/,'title=Talk:');
history.appendChild(document.createTextNode('History'));
// Create a Talk: 'Since' link
var since = document.createElement('a');
since.href = history.href + '&gotosince=true';
if (SinceConfig.historyRevisions)
since.href += '&limit=' + SinceConfig.historyRevisions;
since.appendChild(document.createTextNode('Since'));
currentNode.parentNode.appendChild( since);
currentNode.parentNode.appendChild( document.createTextNode( ' | ' ) );
currentNode.parentNode.appendChild( history );
currentNode.parentNode.appendChild( document.createTextNode( ')' ) );
n+=2; // skip newly added Since and History links
}
}
}
}
}
$(addSinceWatchlistLinks);
//