Delicious Auto Pager

By nirvash Last update Jul 30, 2005 — Installed 726 times.
// ==UserScript==
// @name            Delicious Auto Pager
// @namespace       http://d.hatena.ne.jp/nirvash/
// @author          nirvash
// @include         http://del.icio.us/*
// @description     Add autoloading for next page to del.icio.us bookmark. Double click to enable/disable it.
// ==/UserScript==

// Released under the GPL license
//  http://www.gnu.org/copyleft/gpl.html
//  This script was made based on GoogleAutoPager. (http://la.ma.la/blog/diary_200506231749.htm)

(function() {
  var isEnable = 1;
  var insertPoint;
  var nextUrl;
  var query;
  var offset;
  
  var watch_scroll = function() {
    try {
      if (isEnable == 1) {
        var sc = window.pageYOffset;
        var total = (document.height - innerHeight);
        var remain = total - sc;
        if (remain < 300) {
          do_request();
        }
      }
    } catch (e) {
    };
    
      
    var self = arguments.callee;
    setTimeout(self, 100);
  };
    
  var do_request = function() {
    if (this.requested == offset) {
      return;
    }
    this.requested = offset;
    
    var xmlhttp;
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      xmlhttp = new XMLHttpRequest();
    }
    
    xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState == 4) {
        var v = xmlhttp.responseText;
        var isEnd = 0;
        var startStr = "<div id=\"posts\">";
        var start = v.indexOf(startStr) + startStr.length;
        var end   = v.indexOf("<div class=\"section\">&raquo; Showing");

        v = v.slice(start, end);
        var div = document.createElement("div");
        div.id = "posts";
        div.innerHTML = v;
        document.body.insertBefore(div, insertPoint);
        window.status = "loading page " + offset + " done.";
        offset += 1;
      }
    };
  
    xmlhttp.open("GET", nextUrl.replace(/page=\d*/, "page=" + offset), true);
    window.status = "loading page " + offset;
    xmlhttp.send(null);
  };
  
  var init_autopager = function() {
    // find insertPoint
    var div = document.getElementsByTagName("div");
    var len = div.length;
    for (var i=0; i<len; i++) {
      if (div[i].className == "section") {
        if (div[i].innerHTML.match(".*Showing")) {
          insertPoint = div[i];
        }
      }
    }
    
    // find prev
    var atag = document.getElementsByTagName("a");
    var len = atag.length;
    var prev;
    for (var i=0; i<len; i++) {
      if (atag[i].rel == "prev") {
        prev = atag[i];
      }
    }
    
    nextUrl = prev.href;
    query = nextUrl.substr(nextUrl.indexOf("?")); 
    offset = (query.match(/page=(\d*)/))[1] - 0;
  };

  var dblclick_event = function() {
    isEnable *= -1;
    window.status = (isEnable==1) ? "Enabled" : "Disabled";
  };

  // initialize
  if (window.location.href.indexOf("del.icio.us") != -1) {
    if (document.body.attachEvent) {
      document.body.attachEvent('ondblclick', dblclick_event);
    } else {
      document.body.addEventListener('dblclick', dblclick_event, true);
    }
    
    init_autopager();
    watch_scroll();
  }
})();