Automatic AutoPatchWork

タイトルは↓に引っ掛けました。あまり意味ないです。


前から思ってたんですが、AutoPagerize (一族)で、「ドキュメントの残りの高さ」を決め打ちして継ぎ足すタイミングを判断するのはあまり良い方法では無いですよね。

document 中にある pageElement の位置とスクロール具合で判断したらもっと汎用的なのにと思って AutoPatchWork にパッチを書いてみました。

--- AutoPatchWork.js_original	2009-12-10 11:12:07.000000000 -0500
+++ AutoPatchWork.js	2009-12-10 11:18:07.000000000 -0500
@@ -179,8 +179,11 @@
 		}
 		function check_scroll(){
 			if (loading) return;
-			var remain = Root.scrollHeight - window.innerHeight - window.pageYOffset;
-			if (status.state && remain < status.remain_height)
+			var elms = get_next_elements(document);
+			var last = elms[elms.length-1];
+			if (!last) return;
+			var rect = last.getBoundingClientRect();
+			if (rect.bottom < window.innerHeight * 1.5)
 				dispatch_event('AutoPatchWork.request');
 		}
 		function target_rewrite(evt){

↓こういうふうに、pageElement より下にいっぱい詰め込んであるページで効果を発揮します。

毎スクロールごとに XPath を評価するなんて! と思ったのですが、所要時間は1msぐらいなので許してあげてもいいかなと思います。


何らかの理由で pageElement の最後の要素が変な位置に来ないとも限らないので、remain_height 判定と OR にしたほうがいいのかも。↑ のパッチが最良かは分からないのでそのあたりは適用する人の判断ということでお願いします。