rendered paste body// ==UserScript==// @name whirlpoolImages// @namespace http://plsek.id.au/GreaseMonkey// @description replace links to images with the image itself - V8.1// @include http://forums.whirlpool.net.au/forum-replies*// ==/UserScript==(function(){ function injectGoogleVid() { var Trigger="http://video.google.com/videoplay?docid="; var xp='//a[contains(@href, "'+Trigger+'")]'; var gvs=document.evaluate(xp,document.body,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); for(var i=0;i<gvs.snapshotLength;i++) { var gv=gvs.snapshotItem(i); lnk=gv.href.replace(/videoplay\?docid=/, 'googleplayer.swf?docId=')+'&hl=en'; var span=document.createElement("SPAN"); span=gv.parentNode.insertBefore(span, gv.nextSibling); span.innerHTML='<embed style="width:400px; height:326px;" '+ 'type="application/x-shockwave-flash" '+ 'src="'+lnk+'"></embed>'; } } function injectYouTube() { var Trigger="http://www.youtube.com/watch?v="; var xp='//a[contains(@href, "'+Trigger+'")]'; var yts=document.evaluate(xp,document.body,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); for(var i=0;i<yts.snapshotLength;i++) { var yt=yts.snapshotItem(i); lnk=yt.href.replace(/watch\?v=/, 'v/'); var span=document.createElement("SPAN"); span=yt.parentNode.insertBefore(span, yt.nextSibling); span.innerHTML='<object width="340" height="280">'+ '<param name="movie" value="'+lnk+ '"/><param name="wmode" value="transparent"/>'+ '<embed src="'+lnk+'" type="application/x-shockwave-flash" '+ 'wmode="transparent" width="340" height="280"></embed></object>'; } } var imagePadding=parseInt(GM_getValue("imagePadding", "12")); var maxHeight=parseInt(GM_getValue("maximumHeight", "300")); var youTubeX=GM_getValue("embedYoutube", "false"); var youTube=(youTubeX=="true"); var googleVidX=GM_getValue("embedGoogleVid", "false"); var googleVid=(googleVidX=="true"); var EventManager= { _registry: null, Initialise: function() { if (this._registry == null) { this._registry = []; EventManager.Add(window, "_unload", this.CleanUp); } }, Add: function(obj, type, fn, useCapture) { this.Initialise(); var realType=(type=="_unload"?"unload":type); if (typeof obj == "string") obj = document.getElementById(obj); if (obj == null || fn == null) return false; if(obj.addEventListener) obj.addEventListener(realType, fn, useCapture); else if(obj.attachEvent) obj.attachEvent("on"+realType, fn); this._registry.push({obj:obj, type:type, fn:fn, useCapture:useCapture}); return true; }, CleanUp: function() { for (var i = 0; i < EventManager._registry.length; i++) { with(EventManager._registry[i]) { if(type=="unload") fn(); if(obj.removeEventListener) obj.removeEventListener(type,fn,useCapture); else if (obj.detachEvent) obj.detachEvent("on"+realType, fn); } } EventManager._registry = null; } }; var imageTable={}; function clickImage(e) { var el=e.target; if(imageTable[el.id].width) { var cWidth=el.style.width; el.style.width=imageTable[el.id].width; imageTable[el.id].width=cWidth; } else if(imageTable[el.id].height) { var cHeight=el.style.height; el.style.height=imageTable[el.id].height; imageTable[el.id].height=cHeight; } } function makeThumb(inX, inY, maxX, maxY) { var retVal={changed:false, widthChanged:false, heightChanged:false, width:inX, height:inY}; if(inX>maxX || inY>maxY) { retVal.changed=true; var xRatio=1.0*inX/(1.0 * maxX); var yRatio=1.0*inY/(1.0 * maxY); if(yRatio>xRatio) { retVal.height=maxY; retVal.heightChanged=true; retVal.width=Math.ceil((1.0*inX)/yRatio); } else { retVal.width=maxX; retVal.widthChanged=true; retVal.height=Math.ceil((1.0*inY)/xRatio); } } return retVal; } function addImageToImageAnchor(Anchor, Container, num) { var extensions=".jpeg.jpg.gif.png.bmp"; var href=Anchor.href.toLowerCase(); var dot=href.lastIndexOf("."); if(dot >= 0 && extensions.indexOf(href.substr(dot)) >= 0) { var imgObj=document.createElement('IMG'); EventManager.Add(imgObj,"load", function() { var div=document.createElement("DIV"); var img=document.createElement("IMG"); img=div.appendChild(img); img.style.border="none"; img.style.padding="0"; img.style.margin="0"; var width; if(document.defaultView && document.defaultView.getComputedStyle) width=parseInt(document.defaultView.getComputedStyle(Container, '').getPropertyValue("width")); else width=Container.clientWidth-24; width=parseInt(width); width-=(imagePadding*2); var dimension=makeThumb(imgObj.width, imgObj.height, width, maxHeight); if(dimension.changed) { img.style.cursor="move"; img.id=imgObj.alt; if(dimension.widthChanged) { img.style.width=dimension.width+"px"; imageTable[img.id]={width:imgObj.width+"px"}; } if(dimension.heightChanged) { img.style.height=dimension.height+"px"; imageTable[img.id]={height:imgObj.height+"px"}; } EventManager.Add(img, "click", clickImage, false); div.style.paddingLeft=imagePadding+"px"; div.style.paddingRight=imagePadding+"px"; } Anchor.parentNode.insertBefore(div, Anchor); img.src=imgObj.src; }, false); var id="addImage"+num; imgObj.alt=id; imgObj.src=Anchor.href; } } function configImages(e) { var newDiv=document.getElementById("wimage_config"); if(newDiv) return; newDiv=document.body.appendChild(document.createElement("DIV")); newDiv.style.position="absolute"; //newDiv.style.display="-moz-stack"; newDiv.style.top=(e.pageY-10)+"px"; newDiv.style.left=(e.pageX-10)+"px"; newDiv.style.zIndex="9999"; newDiv.style.height="164px"; newDiv.style.color="black"; newDiv.id="wimage_config"; newDiv=newDiv.appendChild(document.createElement("DIV")); newDiv.style.border="ridge 2px"; newDiv.style.padding="10px"; newDiv.style.backgroundColor="#ddddff"; newDiv.appendChild(document.createTextNode("Image padding")); newDiv.appendChild(document.createElement("BR")); var inPadding=newDiv.appendChild(document.createElement("INPUT")); inPadding.type="text"; inPadding.value=imagePadding; inPadding.id="wimage_padding"; newDiv.appendChild(document.createElement("BR")); newDiv.appendChild(document.createTextNode("Maximum height")); newDiv.appendChild(document.createElement("BR")); var inHeight=newDiv.appendChild(document.createElement("INPUT")); inHeight.type="text"; inHeight.value=maxHeight; inHeight.id="wimage_height"; newDiv.appendChild(document.createElement("BR")); newDiv.appendChild(document.createTextNode("Inline youTube")); var inYouTube=newDiv.appendChild(document.createElement("INPUT")); inYouTube.type="checkbox"; inYouTube.checked=youTube; inYouTube.id="wimage_youtube"; newDiv.appendChild(document.createElement("BR")); newDiv.appendChild(document.createTextNode("Inline Google")); var inGoogleVid=newDiv.appendChild(document.createElement("INPUT")); inGoogleVid.type="checkbox"; inGoogleVid.checked=googleVid; inGoogleVid.id="wimage_googlevid"; newDiv.appendChild(document.createElement("BR")); newDiv.appendChild(document.createElement("BR")); var inClose=newDiv.appendChild(document.createElement("INPUT")); inClose.type="button"; inClose.value="CANCEL"; EventManager.Add(inClose, "click", function() { var div=document.getElementById("wimage_config"); document.body.removeChild(div); }, false); var inSubmit=newDiv.appendChild(document.createElement("INPUT")); inSubmit.type="button"; inSubmit.value="ACCEPT"; EventManager.Add(inSubmit, "click", function() { var div=document.getElementById("wimage_config"); var pad=document.getElementById("wimage_padding"); var hgt=document.getElementById("wimage_height"); var eyt=document.getElementById("wimage_youtube"); var egv=document.getElementById("wimage_googlevid"); var imagePadding=parseInt(pad.value); var maxHeight=parseInt(hgt.value); var youTube=eyt.checked; var googleVid=egv.checked; GM_setValue("imagePadding", imagePadding.toString()); GM_setValue("maximumHeight", maxHeight.toString()); GM_setValue("embedYoutube", youTube.toString()); GM_setValue("embedGoogleVid", googleVid.toString()); document.body.removeChild(div); }, false); } var imgNum=0; var xPath=".//TD[@class='bodytext']"; var replies=document.evaluate(xPath,document.body,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); for(var i=0;i<replies.snapshotLength;i++) { var reply=replies.snapshotItem(i); var links=reply.getElementsByTagName("A"); Array.forEach(links, function(lnk) { addImageToImageAnchor(lnk, reply, imgNum++); }); } xPath=".//TD[@class='breadtask']"; var breadTask=document.evaluate(xPath,document.body,null,XPathResult.ANY_UNORDERED_NODE_TYPE,null); breadTask=breadTask.singleNodeValue; breadTask.insertBefore(document.createTextNode(" "), breadTask.firstChild); var xconfig=breadTask.insertBefore(document.createElement("SPAN"), breadTask.firstChild); var config=xconfig.appendChild(document.createElement("SPAN")); config.appendChild(document.createTextNode("{Images}"));// xconfig.appendChild(document.createTextNode(" |")); xconfig.className="small"; config.style.color="#000080"; config.style.cursor="pointer"; EventManager.Add(config, "click", configImages, false); if(youTube) injectYouTube(); if(googleVid) injectGoogleVid();})();