Hatena Bookmark AutoPager お気に入り対応版
勝手にお気に入りに対応させてみた。ついでにページ切り替え用のリンクも削除。
// ==UserScript== // @name Hateba Bookmark, autopager // @description work on bookmark list or favorite list (not entry list) // @namespace http://lowreal.net/ // @include http://b.hatena.ne.jp/*/* // ==/UserScript== (function () { var loaded = 20; var loading = false; var url = location.href; var c = $X("//div[@class='body']")[0]; window.addEventListener("scroll", function (e) { if (loading) return; var sc = document.body.scrollTop; var total = (document.body.scrollHeight - document.body.clientHeight); var remain = total - sc; // window.status = remain; if (remain < 500) { loading = true; window.status = ["Loading... (", loaded, "..", loaded+20, ") .. "].join(""); GM_xmlhttpRequest({ method : "GET", url : url+"?of="+loaded, onload : function (req) { loaded += 20; loading = false; window.status += "loaded"; var d = document.createElement("div"); d.innerHTML = req.responseText; var taglist = $X(".//div[@class='taglist']", d)[0]; if (taglist) { taglist.parentNode.removeChild(taglist); } var favoritelist = $X(".//div[@class='favoritelist']", d)[0]; if (favoritelist) { favoritelist.parentNode.removeChild(favoritelist); } var pagers = $X(".//div[@class='pager']", d); for (var i = 0; i < pagers.length; i++) { pagers[i].parentNode.removeChild(pagers[i]); } var main = $X(".//div[@class='main']", d)[0]; if ($X("count(.//dl) > 0", main)) c.appendChild(main); else loading = true; } }); } }, false); /* template functions */ 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); } } 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 (str) { return str.replace(/#{([^}]+)}/g, function (w, $1) { return eval($1); }); } })();