Result Numbers

By Shinya Last update Feb 10, 2009 — Installed 2,062 times. Daily Installs: 2, 4, 1, 0, 4, 1, 0, 0, 6, 3, 3, 3, 6, 6, 5, 3, 6, 7, 3, 4, 8, 4, 4, 2, 6, 9, 3, 10, 2, 9, 2, 2

There are 3 previous versions of this script.

// ==UserScript==
// @name           Result Numbers
// @description    Adds a number in turn to web search results of Google.
// @version        1.0.8
// @author         Shinya
// @namespace      http://www.code-404.net/
// @homepage       http://www.code-404.net/article/2007/08/07/result-number
// @include        http://www.google.*/search*
// @Note           
// ==/UserScript==

(function(){
  var number = 1;
  var start = document.location.href.match(/start=(\d+)/);
  if(start) number = ++start[1];
  
  var results = $X("//table[@class='ts']//table[@class='ts']//a[@class='l'] | //h3[@class='r']//a[@class='l']");
  number = addNumberResults(results, number);
  
  addFilter(function(elm){
    for(var i = 0, l = elm.length; i < l; i++){
      var results = $X(".//table[@class='ts']//table[@class='ts']//a[@class='l'] | .//h3[@class='r']//a[@class='l']", elm[i]);
      if(results == null) continue;
      number = addNumberResults(results, number);
      break;
    }
  });
  
  function addNumberResults(results, count){
    for(var i = 0; result = results[i]; i++, count++){
      var prefix = document.createTextNode(count + ". ");
      result.parentNode.insertBefore(prefix, result.parentNode.firstChild);
    }
    return count;
  }
  
  /*
   * $X function from nulog
   * http://lowreal.net/logs/2006/03/16/1
   *
   * Thanks, cho45.
   */
  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;
  }
  
  // For Autopagerize 0.0.12
  function addFilter(filter, i) {
    i = i || 4;
    if(window.AutoPagerize && window.AutoPagerize.addFilter){
      window.AutoPagerize.addFilter(filter);
    }
    else if(i > 1){
      setTimeout(arguments.callee, 1000, filter, i - 1);
    }
  }
})();