User:Dispenser/alttextexplorer.js

/* If you want to use this script, simply add the following line to your Special:Mypage/monobook.js:

importScript('User:Dispenser/alttextexplorer.js'); // Linkback: User:Dispenser/alttextexplorer.js
 * (Please keep the comment so I can see how many people use this).

(function { return; // early exit - script is broken. if(typeof(noaltcss) == 'undefined'){	appendCSS(".alt-block{background:#444; color:#fff; line-height:1.3em; font-size:0.8em; padding:2px; text-align:left;} .alt-block span{background:#444;}")	appendCSS(".alt-inline{border:1px solid #444; display:inline-block; position:relative;} .alt-inline div{background:#444; color:#fff; font-size:80%; position:absolute; top:0; display:none;; width:20em; z-index:15;} .alt-inline:hover div{display:block;}")	appendCSS("img.alt-nolink { border:2px solid sandybrown;}")	appendCSS("img.alt-none { border:2px solid red;}")	appendCSS("img.alt-nolink.alt-none, img.tex.alt-nolink { border:none;}") }

var BlockNodes = /^(?:BR|BLOCKQUOTE|BUTTON|CENTER|DIV|H[1-6]|OL|UL|DL|TABLE|TR|TD|TH|P|PRE)$/ function addAlts { var image; var bodyc = document.getElementById('bodyContent') || document.getElementById('content') || document.getElementById('mw_content') var images = bodyc.getElementsByTagName('img') for(var i=0; (image=images[i]); i++) { // Skip skins or extensions icons if(image.src.indexOf('/skins-1.5/') != -1 || image.src.indexOf('/extensions/') != -1) continue

var useblock var nt = image var container = nt		while(true){ if(nt.nextSibling){ nt = nt.nextSibling if(nt.nodeType==3){ if(/\S/.test(nt.nodeValue)){ useblock = false; break; }				}else if(nt.nodeType == 1){ useblock = BlockNodes.test( nt.tagName ) break; }			} else { // Assume that we are at the end of the elements if(BlockNodes.test(container.parentNode.tagName)){ useblock = true; break; } else { container = nt = container.parentNode; }			}		}		/* Deal with geobox redpog elements */ if(useblock && container.parentNode.tagName == "DIV" && container.parentNode.style.position == "relative"){ if( container.parentNode.parentNode.tagName == "DIV" ) container = container.parentNode else useblock = false }		/* Make changes */ if (image.alt == '') { image.className += " alt-none"; } else if(useblock) { var n = container.parentNode.insertBefore(document.createElement('div'), container.nextSibling); n.appendChild(document.createElement('span')).appendChild(document.createTextNode(image.alt)); n.className = "alt-block"; n.style.width = (image.width - 2) + 'px'; } else { var n = container.parentNode.insertBefore(document.createElement('span'), container); n.appendChild(container); n.className = "alt-inline" n.appendChild(document.createElement('div')).appendChild(document.createTextNode(image.alt)); }

if(image.parentNode.tagName != 'A'){ image.className += " alt-nolink"; } else if(image.alt) { var alt = escape(image.alt.replace(/ /g,'_')) var a = image.src.match( new RegExp( RegExp.escape(alt)+"(|\\.\\w{3})$" ) ) if(a) image.className += " alt-none" }	} }

if(doneOnloadHook) addAlts; //if imported dynamically else addOnloadHook(addAlts); });