User:Splarka/cmlhider.js

/* Category Member Link Hider script, version [0.0.1]

Originally from: http://en.wikipedia.org/wiki/User:Splarka/cmlhider.js

On Prefixindex, will prompt for a category name, and hide all links found to pages in that category.

Notes:

  • VERY slow, could be optimized probably.
  • Limited to categories with 500 members, a query-continue would be needed for longer ones.
  • Test version.
  • /

if(wgCanonicalSpecialPageName == 'Prefixindex') addOnloadHook(hideCatMemLinksButton)

function hideCatMemLinksButton() {

mw.util.addPortletLink('p-tb','javascript:hideCML()','Hide links','t-cml','Hide links to articles in a specified category');

}

function hideCML() {

var cat = prompt('Enter a category name','Category:NA-Class articles');

if(cat == '' || !cat) return;

var cml = document.getElementById('t-cml');

if(cml) {

var prog = document.createElement('img');

prog.setAttribute('id','cml-prog');

prog.setAttribute('src',stylepath + '/common/images/spinner.gif');

cml.appendChild(prog);

}

var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=query&format=json&callback=hideCMLCB&list=categorymembers&cmnamespace=14&cmlimit=500&cmtitle=' + cat;

var scriptElem = document.createElement('script');

scriptElem.setAttribute('src',url);

scriptElem.setAttribute('type','text/javascript');

document.getElementsByTagName('head')[0].appendChild(scriptElem);

}

function hideCMLCB(obj) {

var links = (document.getElementById('content')) ? document.getElementById('content').getElementsByTagName('a') : document.getElementById('mw_content').getElementsByTagName('a')

if(!obj['query'] || !obj['query']['categorymembers']) return

for(var i in obj['query']['categorymembers']) {

var pg = obj['query']['categorymembers'][i]['title'];

pg = wgArticlePath.replace(/\$1/,'') + pg.replace(/ /ig,'_');

for(var j=0;j

if(links[j].href.replace(wgServer,'') == pg) {

links[j].style.visibility = 'hidden';

}

}

}

var cml = document.getElementById('t-cml');

if(cml) document.getElementById('cml-prog').style.display = 'none'

}