User:Connel MacKenzie/custom.js/citetab.js

/* User:Hippietrail wrote this.

// look for a wiki link with a specific title attribute and return the link's class name // possible returns: null, '', 'new', 'new selected', 'selected new' function lookforlink(tabli, title) { var foundclass = 'dunno';

var allas = document.getElementById('bodyContent').getElementsByTagName('a');

if (allas != -1) { for (var i = 0; i < allas.length; i++) { if (allas[i].title == title) { foundclass = allas[i].className; break; }   }  }

// no link in this document so use ajax if (foundclass == 'dunno') { var req = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject('Microsoft.XMLHTTP');

req.open('GET', wgScriptPath + '/index.php?title=' + title + '&action=raw', true); req.onreadystatechange = function(event) { var li = tabli; if (req.readyState == 4) { // page exists. make tab link blue if (req.status == 200) { //li.removeAttribute('className'); li.className = null; // page doesn't exist. make tab link red and change href to action edit } else if (req.status == 404) { li.className = 'new'; li.firstChild.href = li.firstChild.href.replace(/\/wiki\/(.*)/, '/w/index.php?title=$1&action=edit'); } else { debugPrint('bad rsc status ' + req.status + '\n'); }     }    };    req.send(null); }

return foundclass; }

// set or change the class and href of a tab function fixtab(li, classes, title) { if (classes && classes.match(/\bnew\b/)) li.firstChild.href = wgScriptPath + '/index.php?title=' + title + '&action=edit'; else li.firstChild.href = '/wiki/' + title;

if (classes != null) li.className = classes; else //li.removeAttribute('className'); li.className = null; }

// add citations tab function addCiteTab { var currentpagetype = 'dunno';

var maintitle; var talktitle; var citetitle;

// make the correct article names for each tab switch (document.getElementsByTagName('body')[0].className.match(/\bns-(-?\d+)\b/)[1]) { case '0': if (wgTitle.search(/^Citations:/) != -1) { currentpagetype = 'cite'; maintitle = wgTitle.replace(/^Citations:(.*)$/, '$1'); talktitle = 'Citations talk:' + maintitle; citetitle = wgTitle; } else { currentpagetype = 'article'; maintitle = wgTitle; talktitle = 'Talk:' + maintitle; citetitle = 'Citations:' + wgTitle; }   break case '1': currentpagetype = 'talk'; maintitle = wgTitle; talktitle = 'Talk:' + maintitle; citetitle = 'Citations:' + wgTitle; break default: return; }

var maintabli = document.getElementById('ca-nstab-main'); var talktabli = document.getElementById('ca-talk'); var citetabli = document.createElement('li'); citetabli.id = 'ca-cite'; citetabli.appendChild(document.createElement('a')); citetabli.firstChild.appendChild(document.createTextNode('citations'));

if (currentpagetype == 'article' || currentpagetype == 'talk') { fixtab(citetabli, lookforlink(citetabli, citetitle), citetitle);

} else if (currentpagetype == 'cite') { // move article tab href and classes to cite tab fixtab(citetabli, maintabli.className, citetitle);

fixtab(maintabli, lookforlink(maintabli, maintitle), maintitle); fixtab(talktabli, lookforlink(talktabli, talktitle), talktitle); }

// add the cite tab talktabli.parentNode.insertBefore(citetabli, talktabli.nextSibling); }

addOnloadHook( addCiteTab );

/*