From Wikipedia, the free encyclopedia
Nice script, the general outline looks familiar ^_^. There is an alternate 'safer' way to do this by the way: you can hide all images before the document loads, and then you re-display the safe ones.
Here is an example mockup:
Mockup
if(wgAction == 'view') preemptImages();
function preemptImages() {
appendCSS('#bodyContent img {visibility:hidden;}\n#bodyContent img.goodimage {visibility:visible;}\n#bodyContent img.badimage {display:none;}');
}
function appendCSS(text) {
var s = document.createElement('style');
s.type = 'text/css';
s.rel = 'stylesheet';
if (s.styleSheet) s.styleSheet.cssText = text //IE
else s.appendChild(document.createTextNode(text + '')) //Safari sometimes borks on null
document.getElementsByTagName('head')[0].appendChild(s);
return s;
}
function badImageGet() {
var url = wgScriptPath + '/api.php?action=query&titles=MediaWiki:Bad%20image%20list&prop=links&format=json&plnamespace=6&callback=badImages';
var scriptElem = document.createElement('script');
scriptElem.setAttribute('src',url);
scriptElem.setAttribute('type','text/javascript');
document.getElementsByTagName('head')[0].appendChild(scriptElem);
}
function badImages(obj) {
if(!obj['query'] || !obj['query']['pages']) return
badimages = obj['query']['pages']['1724570']['links'];
var badimagelist=new Array();
for (var q=0;q<badimages.length;q++) {
badimagelist[q] = badimages[q].title;
}
badimagelist = badimagelist.toString();
for (var i=0; i<document.images.length; i++) {
imagename = document.images[i].src.toString();
if (imagename.indexOf('upload.wikimedia.org') != -1) {
if (imagename.indexOf('/thumb/') == -1) {
imagename = imagename.replace(/http:\/\/upload\.wikimedia\.org\/wikipedia\/\w+\/\w\/\w\w\//, 'Image:');
} else {
imagename = imagename.replace(/http:\/\/upload\.wikimedia\.org\/wikipedia\/\w+\/thumb\/\w\/\w\w\//, 'Image:');
imagename = imagename.replace(/\/\w+px-.*/, '');
}
imagename = imagename.replace(/_/, ' ');
if (badimagelist.indexOf(imagename) != -1) {
document.images[i].className += ' badimage';
} else {
document.images[i].className += ' goodimage';
}
}
}
}
if(wgAction == "view") {
addOnloadHook(badImageGet);
}
The reason it is good to do it this way: all images are made invisible with 'visibility', this preserves the spacing of the page, so as to keep most pages from reloading or content jumping around. The images are then each checked, and the good images are made visible again. The bad ones however are additionally made display:none so as to remove the space they take up (this is optional).
Just maybe some ideas to improve your awesome script ^_^. --Splarka (rant) 10:12, 3 March 2008 (UTC)