Google Link Preview - mouseover

By Mug Nebot Last update Jan 2, 2007 — Installed 1,170 times.
// ==UserScript==
// @name          Google Link Preview - mouseover
// @namespace     http://loucypher.wordpress.com/
// @include       http://www.google.*/search?*
// @include       http://www.google.*/custom?*
// @include       http://news.google.*/*
// @description	  Adds Clusty.com-like mouseover-magnifiers on web and news search results to preview a link in a frame
// ==/UserScript==

// Last updated: 2006-11-08

var XPath;
if(location.hostname.match(/\.google\./)) {
  if(location.hostname.match(/news/))
    XPath = '//a[starts-with(@id, "r-") and count(img)=0]';
  else if(location.href.match(/\/blogsearch\?/))
    XPath = '//a[starts-with(@id, "p-") and count(img)=0]';
  else
    XPath = '//h2[@class="r"]/a[@class="l"]';
} else if(location.hostname.match(/technorati\.com/))
  XPath = '//div/ol/li/h3//a[@title]';

var links = document.evaluate(XPath, document, null, 6, null);
if(!links.snapshotLength) return;

for(var i = 0; i < links.snapshotLength; i++) {
  var link = links.snapshotItem(i);
  if(link.hasAttribute('onmousedown')) link.removeAttribute('onmousedown');

  var img = document.createElement('img');
  img.alt = 'preview';
  img.border = 'none';
  img.align = 'absmiddle';
  img.src = 'data:image/gif;base64,R0lGODlhDAAMAMIGAKZZWatkYcqfjsyikM2mk9KumfLsyPLsyCH5BAEKAAcALAAAAAAMAAwAAAMneEcRpFCFokqIi8Ly4MWfhB1hFnGgZgkj4wjAMEZDPEO1fB%2F5zg8JADs%3D';

  var pLink = document.createElement('a');
  pLink.href = link.href;
  pLink.title = 'preview';
  pLink.style.marginLeft = '1em';
  pLink.addEventListener('mouseover', function(event) {
    event.preventDefault();
    var pOpen = 'data:image/gif;base64,R0lGODlhDAAMAMIGAKZZWatkYcqfjsyikM2mk9KumfLsyPLsyCH5BAEKAAcALAAAAAAMAAwAAAMneEcRpFCFokqIi8Ly4MWfhB1hFnGgZgkj4wjAMEZDPEO1fB%2F5zg8JADs%3D';
    var pClosed = 'data:image/gif;base64,R0lGODlhDAAMAMIGAMwAAKtkYc2Tk8yikM2mk9KumQAAAAAAACH5BAEKAAcALAAAAAAMAAwAAAMyeEcRpFCFokqIix5xytvHtQHcJZDiKAQnR2gqCU1VizEsKWPtYEM%2F307BgfgGGMxgkAAAOw%3D%3D';
    this.firstChild.src = this.firstChild.src == pOpen?pClosed:pOpen;
    this.title = this.title == 'preview'?'close preview':'preview';
    this.nextSibling.style.display = this.nextSibling.style.display == 'none'?'block':'none';
    if(!this.nextSibling.hasAttribute('src'))
      this.nextSibling.src = this.previousSibling.href;
  }, false);
  pLink.addEventListener('mouseout', function(event) {
    event.preventDefault();
    var pOpen = 'data:image/gif;base64,R0lGODlhDAAMAMIGAKZZWatkYcqfjsyikM2mk9KumfLsyPLsyCH5BAEKAAcALAAAAAAMAAwAAAMneEcRpFCFokqIi8Ly4MWfhB1hFnGgZgkj4wjAMEZDPEO1fB%2F5zg8JADs%3D';
    var pClosed = 'data:image/gif;base64,R0lGODlhDAAMAMIGAMwAAKtkYc2Tk8yikM2mk9KumQAAAAAAACH5BAEKAAcALAAAAAAMAAwAAAMyeEcRpFCFokqIix5xytvHtQHcJZDiKAQnR2gqCU1VizEsKWPtYEM%2F307BgfgGGMxgkAAAOw%3D%3D';
    this.firstChild.src = this.firstChild.src == pOpen?pClosed:pOpen;
    this.title = this.title == 'preview'?'close preview':'preview';
    this.nextSibling.style.display = this.nextSibling.style.display == 'none'?'block':'none';
    if(!this.nextSibling.hasAttribute('src'))
      this.nextSibling.src = this.previousSibling.href;
  }, false);
  pLink.appendChild(img);

  var iframe = document.createElement('iframe');
  iframe.style.display = 'none';
  iframe.width = '80%';
  iframe.height = '250';
  iframe.appendChild(document.createTextNode(''));

  link.parentNode.insertBefore(iframe, link.nextSibling);
  link.parentNode.insertBefore(pLink, link.nextSibling);
}