All pastes #982411 Raw Edit

Untitled

public javascript v1 · immutable
·published 2008-04-12 15:20 UTC
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();})();