//This function adds a link to the toolbox which, when clicked on a Category page, prompts for the name of a template,
//checks if the pages listed contain that template, and changes the bullet to a tick mark if so.
//To use this function add <nowiki>{{subst:js|User:Dr pda/templatecheck.js}}</nowiki> to your monobook.js
//
function loadXMLDocPassingTemplateAndURL(url,handler,template)
{
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
var req = new XMLHttpRequest();
}
// branch for IE/Windows ActiveX version
else if (window.ActiveXObject) {
var req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req) {
req.onreadystatechange = function () {handler(req,template,url)};
req.open("GET", url, true);
req.send("");
}
}
function getTemplateList(req,template,url) {
// only if req shows "loaded"
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
// ...processing statements go here...
var response = req.responseXML.documentElement;
var pages = response.getElementsByTagName('page');
if(pages.length > 0){
for(var i=0;i<pages.length; i++){
var tl=pages[i].getElementsByTagName('tl');
if(tl.length > 0){
for(var j=0;j<tl.length;j++){
if(tl[j].getAttribute('title')==template){
pagesList[pages[i].getAttribute('title')] = 'true';
}
}
}
}
//Check for more pages
var tlcontinue='';
var querycontinue = response.getElementsByTagName('query-continue');
if(querycontinue.length>0){
var qctemplates = querycontinue[0].getElementsByTagName('templates');
if(qctemplates.length>0){
var tlcontinue = qctemplates[0].getAttribute('tlcontinue');
loadXMLDocPassingTemplateAndURL(url+'&tlcontinue='+tlcontinue,getTemplateList,template);
}
}
//Do processing once all tlcontinues have been followed
if(tlcontinue==''){
if(!list){
mwPagesDiv=document.getElementById('mw-pages');
liList = mwPagesDiv.getElementsByTagName('li');
}
if(liList.length>0){
for(var i=0; i<liList.length; i++){
var pageName = liList[i].firstChild.title;
if(pagesList[pageName]){
liList[i].style.cssText = "list-style-image:url('http://upload.wikimedia.org/wikipedia/commons/thumb/5/52/%E2%98%91.svg/11px-%E2%98%91.svg.png')";
}
else{
liList[i].style.cssText = '';
}
}
}
var check = document.getElementById('t-check-template');
if(check) removeSpinner('check');
}
}
} else {
alert("There was a problem retrieving the XML data:\n" +
req.statusText);
}
}
}
function checkTemplates(){
var template=prompt("Enter the template you want to check for\n (Don't include Template:)","");
var check = document.getElementById('t-check-template');
if(check) injectSpinner(check,'check');
template = "Template:"+template.toUpperCase().substr(0,1)+template.substr(1);
pagesList = new Object();
if(list){
listNumber = prompt("Enter the number of the section you want to check for "+template+"\n(See table of contents)");
listNumber--;//array starts at 0
var olList = document.getElementsByTagName('ol');
if(!(olList.length>0 && olList[listNumber])) {alert("Error. There are only"+olList.length+" lists on this page");return 0;}
liList = olList[listNumber].getElementsByTagName('li');
var titleString1 = '';
var titleString2 = '';
for(var i=0; i<50; i++){
titleString1 += encodeURIComponent(liList[i].firstChild.title + '|');
titleString2 += encodeURIComponent(liList[i+50].firstChild.title + '|');
}
titleString1 = titleString1.substring(0,titleString1.length-1);
titleString2 = titleString2.substring(0,titleString2.length-1);
queryURL1 = '/w/api.php?action=query&titles='+titleString1+'&tllimit=500&prop=templates&format=xml';
queryURL2 = '/w/api.php?action=query&titles='+titleString2+'&tllimit=500&prop=templates&format=xml';
loadXMLDocPassingTemplateAndURL(queryURL1,getTemplateList,template);
loadXMLDocPassingTemplateAndURL(queryURL2,getTemplateList,template);
}
else{
queryURL = '/w/api.php?action=query&generator=categorymembers&gcmtitle=' + mw.config.get('wgPageName') + '&gcmlimit=200&prop=templates&tllimit=500&format=xml';
loadXMLDocPassingTemplateAndURL(queryURL,getTemplateList,template);
}
}
addOnloadHook(function () {
if(mw.config.get('wgCanonicalNamespace') == 'Category'){
list = false;
mw.util.addPortletLink('p-tb', 'javascript:checkTemplates()', 'Check for template', 't-check-template', 'Check pages in category for use of a template', '', '');
}
else if(document.location.href.indexOf('List_of_biographies/') != -1){
list = true;
mw.util.addPortletLink('p-tb', 'javascript:checkTemplates()', 'Check for template', 't-check-template', 'Check pages in list for use of a template', '', '');
}
});