User:Splarka/randab.js
/* Random Dab Finder, version [0.0.0]
Originally from: http://en.wikipedia.org/wiki/User:Splarka/randab.js
Based on http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.js/RandomBook.js&oldid=1496500
Grabs 10 random pages from the API, checks if any are disambiguations. Repeats until it finds a match.
Notes:
- Don't grab more than 10 random pages. Logged in users can get more, but anon users cannot.
- Since this uses callback, all users are limited to 10 anyway.
- Automatically re-queries until it finds a page in "Category:All disambiguation pages".
- As 5.4% of pages are in this category, most queries should take only 2 or 3 iterations.
- Setting window.location.href eats history in some browsers.
- To show a link instead use: var ranDabAsLink = true; (users can set this in their monobook individually too).
- Uses curid links, I usually trust these more than trying to generate /wiki links.
- /
var ranDabAsLink = false;
var rbrqid = 0;
var rburl = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=query&indexpageids=1&generator=random&grnnamespace=0&grnlimit=10&prop=categories&cllimit=max&format=json&callback=showRanDabCB&requestid=rb';
function showRanDab() {
injectSpinner(document.getElementById('n-randab').firstChild,'ranDabSpinner');
mw.loader.load(rburl + rbrqid);
rbrqid++;
}
function showRanDabCB(obj) {
if(!obj['query'] || !obj['query']['pages'] || !obj['query']['pageids']) {
document.getElementById('n-randab').appendChild(document.createTextNode(' error'));
removeSpinner('ranDabSpinner');
return false;
}
var id = obj['query']['pageids'];
var found;
for(var i=0;i var cats = obj['query']['pages'][id[i]]['categories']; if(!cats) continue for(var j=0;j var ct = cats[j]['title']; if(ct == 'Category:All disambiguation pages') { found = obj['query']['pages'][id[i]]; break; } } if(found) break } if(!found) { // didn't find any, try again mw.loader.load(rburl + rbrqid); rbrqid++; } else { removeSpinner('ranDabSpinner'); var link = mw.config.get('wgServer') + mw.config.get('wgScript') + '?curid=' + found['pageid']; if(window.ranDabAsLink) { var a = document.createElement('a'); a.setAttribute('href',link); a.style.display = 'block'; a.appendChild(document.createTextNode(' \u2022\u00A0' + found['title'])) document.getElementById('n-randab').appendChild(a); } else if(window.location.assign) { window.location.assign(link); } else { window.location.href = link; } } return true; } function showRanDabLink() { mw.util.addPortletLink('p-navigation','javascript:showRanDab();','Random dab','n-randab','Show me a random disambiguation page'); } $(showRanDabLink);