GoogleSearchAddThumbnail

By bluerabbit Last update Jan 26, 2009 — Installed 2,146 times.

There are 6 previous versions of this script.

// ==UserScript==
// @name		  GoogleSearchAddThumbnail
// @namespace	  http://d.hatena.ne.jp/bluerabbit/
// @include		  http://www.google.co.jp/search*
// @description    Google Search Add Thumbnail
// @version        0.0.4
// ==/UserScript==
// Released under the GPL license
//  http://www.gnu.org/copyleft/gpl.html

(function() {

// -- [Main] ----------------------------------------------------------------------

GM_addStyle(<><![CDATA[
	.j {
		float: right;
	}
]]></>);

function main() {
	var resultItems = $X("//li[@class='g']");
	for (var i = 0; i < resultItems.length; i++) {
		var item = resultItems[i];
		var a = $S('.//a[@class="l"]', item);
		var div_area = $S('.//div[@class="s"]', item);
  	if (div_area == null) {
  	  continue;
  	}
  	var span = $S('.//span[@class="gl"]', div_area);
  	var img = $S('.//a[@class="createImage"]', div_area);
    if (img != null) {
      continue;
    }
    span.insertBefore( createImage(a.href) , span.firstChild );
	}
}

function setTimerImgReloadEvent() {
  setTimeout(function () {
	  	//log('setTimerImgReloadEvent');
			var resultItems = $X("//li[@class='g']");
      for (var i =0; i < resultItems.length; i++) {
				var item = resultItems[i];
				var div_area = $S('.//div[@class="s"]', item);
		  	if (div_area == null) {
		  	  continue;
		    }
  	  	var span = $S('.//span[@class="gl"]', div_area);
  	  	var a_tag = $S('.//a[@class="createImage"]', span);
  	  	if (a_tag == null) {
  	  	  continue;
  	  	}
  	  	var img = a_tag.childNodes[0];
  	  	if (img == null) {
  	  	  continue;
  	  	}
  	  	var src = img.src;
  	  	img.src='';
  	  	img.src=src;
      }
			setTimerImgReloadEvent();
  }, 3000);
}




// for Auto Pager
function setAutoPagerEvent(){
	var scrollHeight = document.documentElement.scrollHeight;
	document.addEventListener(
		"scroll",
		function(e){
			if(document.documentElement.scrollHeight - scrollHeight > 100){
				scrollHeight = document.documentElement.scrollHeight;
				main();
			}
		},false);
}

// heartrails API
function createImage(url) {
//  var size = 'tiny';
//  var size = 'small';
  var size = 'medium';
//  var size = 'large';
//  var size = 'huge';
  
	var image = '<br/><a class="createImage"  href="' + url + '"><img title="image" src="http://capture.heartrails.com/' + size + '?' + url + '" alt="" /></a>';
	return stringToDom(image);
}
	
// -- [Templete] ----------------------------------------------------------------------

/*----------------------------------------------------------------------------
 * Option
 *--------------------------------------------------------------------------*/

// Firefox log
var DEBUG = true;

/*----------------------------------------------------------------------------
 * Function
 *--------------------------------------------------------------------------*/

// Firefox log api
function log() {
	if (!DEBUG) return;
	unsafeWindow.console.log.apply(unsafeWindow.console, Array.slice(arguments)) 
};
function ok() { log('ok'); };


/** DOM shortcut method **/
function $(element) {
	if (typeof element == 'string') {
		return document.getElementById(element);
 		}
	return element; 
}

function $N (name, attr, childs) {
    var ret = document.createElement(name);
    for (k in attr) {
        if (!attr.hasOwnProperty(k)) continue;
        v = attr[k];
        if (k == "class") {
            ret.className = v;
        } else {
            ret.setAttribute(k, v);
        }
    }
	if (!childs.length) {
		childs = new Array(childs);
	}
    switch (typeof childs) {
        case "string": {
            ret.appendChild(document.createTextNode(childs));
            break;
        }
        case "object": {
            for (var i = 0, len = childs.length; i < len; i++) {
                var child = childs[i];
                if (typeof child == "string") {
                    ret.appendChild(document.createTextNode(child));
                } else {
                    ret.appendChild(child);
                }
            }
            break;
        }
    }
    return ret;
}

function $X (exp, context) {
    if (!context) context = document;
    var resolver = function (prefix) {
        var o = document.createNSResolver(context)(prefix);
        return o ? o : (document.contentType == "text/html") ? "" : "http://www.w3.org/1999/xhtml";
    }
    var exp = document.createExpression(exp, resolver);

    var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
    switch (result.resultType) {
        case XPathResult.STRING_TYPE : return result.stringValue;
        case XPathResult.NUMBER_TYPE : return result.numberValue;
        case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
        case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
            result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
            var ret = [];
            for (var i = 0, len = result.snapshotLength; i < len ; i++) {
                ret.push(result.snapshotItem(i));
            }
            return ret;
        }
    }
    return null;
}
function $S(xpath, context) {
	context = context || document;
	return document.evaluate(xpath, context, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
function stringToDom(str) {
	var d = document.createElement('div');
	d.innerHTML = str;
	var docFrag = document.createDocumentFragment();
	while (d.firstChild) {
		docFrag.appendChild(d.firstChild);
	}
	return docFrag;
}
// add event
window.addEventListener('load', function(){main();setAutoPagerEvent();setTimerImgReloadEvent();}, false);

//unsafeWindow.$X = $X;
//unsafeWindow.$S = $S;
//unsafeWindow.log = log;

})();