User:DerHexer/numberofcategories.js

Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
  function newRequest()
   {
     try {
       if (window.XMLHttpRequest) {
         return new XMLHttpRequest();
       } else {
         return new ActiveXObject("MSXML2.XMLHTTP");
       }
     } catch (e) {
       return false;
     }
   }
   
   function getRequest(url, callback, params) {
	var test = new RegExp(wgServer);
    if(url.search(test) == -1) url = url + '&origin=' + encodeURIComponent(document.location.protocol + wgServer);
    var request = newRequest() ;
    if (request === null) {
        return null;
    }    
    request.open('GET', url, true);
    request.onreadystatechange = function () {
        if(request.readyState==4) {
            callback(request, params);
        }
    };
    request.setRequestHeader('Origin', document.location.protocol + wgServer);
    request.withCredentials = true;
    request.send(null);
 }
 
  function addinfo(req, currentimageold){
   		var numberofcategoriesvar = 0;
 	    allcategories = req.responseXML.getElementsByTagName("cl");
   		for(j=0;j<allcategories.length;j++){
   			var attributehidden = allcategories[j].getAttribute('hidden');
   			if(attributehidden === '') { continue; } else { numberofcategoriesvar++; }
   		}
   		var addcategorynumber = document.createElement('span');
   		var EditTextNode = document.createTextNode('Number of categories: '+numberofcategoriesvar);
		addcategorynumber.appendChild(EditTextNode);
		currentimageold[0].parentNode.insertBefore( addcategorynumber, currentimageold[0].nextSibling );
 }
 
 function numberofcategories(){
 	var allimages = document.getElementById('mw-category-media');
 	if (allimages) allimages = allimages.getElementsByTagName('ul');
 	if (allimages) allimages = allimages[0].getElementsByTagName('li');
 	for(i=0;i<allimages.length;i++){
 		var currentimageold = allimages[i].getElementsByTagName('a');
 		if (currentimageold) currentimage = currentimageold[0].getAttribute('href').replace(/\/wiki\//,'');
 		var req = newRequest();
   		if (req) {
 			var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=parse&format=xml&prop=categories&page='+currentimage;
 			getRequest(url, addinfo, currentimageold);
   		}
 	}
 }
 
 if (wgCanonicalNamespace == "Category") addOnloadHook(numberofcategories);