pageElement、nextLinkの推測
Class、$XはAutoPageLoaderで定義してある。
var Search = new Class(); Search.prototype = { getNextLink: function (doc) { var xpath = '(descendant::link|descendant::a)[@rel="next" or @rel="prev"]|descendant::a[contains(text()," 次") or contains(text(),"Next") or contains(text(),"next") or contains(text(),"NEXT") or contains(text(),">") or contains(text(),">>") or contains(text(),"≫") or contains(text(),"前") or contains(text(),"Prev") or contains(text(),"prev") or contains(text(),"PREV") or contains(text(),"<") or contains(text(),"<<") or contains(text(),"≪")]'; return $X(xpath, doc).pop(); }, getPageElement: function (doc) { function getElemSize (elem) elem.offsetWidth * elem.offsetHeight; return function (parentElem) { var big = $X('./*', parentElem).reduce(function(a, b) { var s = getElemSize(b); return a.size > s? a: {elem:b, size: s}; }, {elem:{offsetWidth: 0, offsetHeight: 0}, size: 0}); return getElemSize(parentElem) > big.size * 2? parentElem: arguments.callee(big.elem); }(doc.body); }, initalize: function (doc) { var nextLink = this.getNextLink(doc); var pageElement = this.getPageElement(doc); return {nextLink: nextLink, pageElement: pageElement}; } };
AutoPageLoaderはSITEINFOを使うことを前提に作っているので、このコードを組み込むにはだいぶコードを変えなければならない。いつか試す予定。
pageElementの推測ロジックはを参考に、nextLinkの推測はPagerization for Greasemonkeyを参考にさせてもらいました。