User:Splarka/galleryimagelist.js
/* Load image thumbnails on Special:ImageList, version [0.0.2c]
Originally from: http://en.wikipedia.org/wiki/User:Splarka/galleryimagelist.js
Notes:
- Uses the API to generate thumbnails of all images listed.
- Shows them under the matching title (batched means they get disarranged, so matching may not be perfect).
- If they are smaller than the chosen width, they get shown at their natural size.
- Maximum height defined as 1.5x maximum width, to prevent large vertical images.
- Currently limited to 50 thumbnails per page.
Todo:
- Test crude title matching.
- Use href of image instead of getText() (have to match against server and image namespace translations)?
- DON'T USE TITLE, subject to change.
- Queue up queries for pages with more than 50, dammit.
- /
var galleryImageListWidth = 100;
if(wgCanonicalSpecialPageName && (wgCanonicalSpecialPageName.toLowerCase() == 'imagelist' || wgCanonicalSpecialPageName.toLowerCase() == 'filelist' || wgCanonicalSpecialPageName.toLowerCase() == 'listfiles')) addOnloadHook(function() {
mw.util.addPortletLink('p-cactions','javascript:galleryImageList()','show thumbnails','ca-galil');
})
function galleryImageList() {
appendCSS('#ca-galil a {visibility:hidden;}');
var table = getElementsByClassName(document,'table','TablePager')[0];
var ti = getElementsByClassName(table,'td','TablePager_col_img_name');
var imgs = [];
for(var i=0;i var imgname = getText(ti[i].getElementsByTagName('a')[0]).replace(/_/ig,' '); imgs.push('Image:' + encodeURIComponent(imgname)); } var width = window.galleryImageListWidthOverride || window.galleryImageListWidth var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?maxage=300&smaxage=300&format=json&callback=galleryImageListCB&action=query&prop=imageinfo&iiprop=url&iiurlwidth=' + width + '&iiurlheight=' + parseInt(width * 1.5) + '&titles=' + imgs.join('|') mw.loader.load(url); } function galleryImageListCB(obj) { if(!obj['query'] || !obj['query']['pages']) return var table = getElementsByClassName(document,'table','TablePager')[0]; var ti = getElementsByClassName(table,'td','TablePager_col_img_name'); var thumbs = obj['query']['pages']; for(var i in thumbs) { var title = thumbs[i]['title']; for(var j=0;j var imgtitle = getText(ti[j].getElementsByTagName('a')[0]).replace(/_/ig,' '); if(title.indexOf(imgtitle) != -1) { var img = document.createElement('img'); img.style.width = thumbs[i]['imageinfo'][0]['thumbwidth'] + 'px'; img.style.height = thumbs[i]['imageinfo'][0]['thumbheight'] + 'px'; img.style.border = '1px solid #999999'; img.style.background = 'url("http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png") repeat'; img.setAttribute('title',title); img.setAttribute('src',thumbs[i]['imageinfo'][0]['thumburl']) ti[j].appendChild(document.createElement('br')); ti[j].appendChild(img); continue; } } } } function getText(obj) { if(obj.nodeType == 3) return obj.nodeValue; var txt = []; var i = 0; while(obj.childNodes[i]) { txt[txt.length] = getText(obj.childNodes[i]); i++; } return txt.join(''); }