// ==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\">» 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();
}
})();