Source for "Result Numbers"

By Shinya
Has 8 other scripts.


// ==UserScript==
// @name           Result Numbers
// @description    Adds a number in turn to web search results of Google.
// @version        1.0.5
// @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("//a[@class='l']");
  number = addNumberResults(results, number);
  
  addFilter(function(elm){
    for(var i = 0, l = elm.length; i < l; i++){
        if(elm[i].firstChild.className != "g") continue;
      var results = $X(".//a[@class='l']", elm[i]);
      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);
    }
  }
})();