aboutsummaryrefslogtreecommitdiffstats
path: root/autopagerize_controll.js
diff options
context:
space:
mode:
authorhogelog2009-01-20 10:18:16 +0000
committerhogelog2009-01-20 10:18:16 +0000
commit6924482b46202070b56af5825ed75cd04a665884 (patch)
tree10d7152a132b24bb366b222ad374fcc566ad154c /autopagerize_controll.js
parentae8f8522c79a01d3cd0154d25fe330b2f8a14fd4 (diff)
downloadvimperator-plugins-6924482b46202070b56af5825ed75cd04a665884.tar.bz2
* add autopagerize_controll.js: controll autopagerize
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@28712 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'autopagerize_controll.js')
-rw-r--r--autopagerize_controll.js111
1 files changed, 111 insertions, 0 deletions
diff --git a/autopagerize_controll.js b/autopagerize_controll.js
new file mode 100644
index 0000000..b97076e
--- /dev/null
+++ b/autopagerize_controll.js
@@ -0,0 +1,111 @@
+// PLUGIN_INFO//{{{
+var PLUGIN_INFO =
+<VimperatorPlugin>
+ <name>{NAME}</name>
+ <description>controll autopagerize</description>
+ <author mail="konbu.komuro@gmail.com" homepage="http://d.hatena.ne.jp/hogelog/">hogelog</author>
+ <version>0.0.1</version>
+ <maxVersion>2.0pre</maxVersion>
+ <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/autopagerize_controll.js</updateURL>
+ <detail><![CDATA[
+== Options ==
+enable mapping key like
+>||
+ let g:autopagerize_prevmap = "J"
+ let g:autopagerize_nextmap = "K"
+||<
+
+== Commands ==
+autopagerize_next:
+ paging next page
+autopagerize_prev:
+ paging prev page
+
+== TODO ==
+
+ ]]></detail>
+</VimperatorPlugin>;
+//}}}
+(function() {
+
+var libly = liberator.plugins.libly;
+var $U = libly.$U;
+var prevMap = liberator.globalVariables.autopagerize_prevmap;
+var nextMap = liberator.globalVariables.autopagerize_nextmap;
+
+var pager = {
+ modes: [modes.NORMAL, modes.VISUAL],
+ next: function(doc, count) {
+ var curPage = pager.getCurrentPage(doc);
+ pager.paging(doc, Math.floor(curPage+count));
+ },
+ prev: function(doc, count) {
+ var curPage = pager.getCurrentPage(doc);
+ liberator.reportError(curPage);
+ pager.paging(doc, Math.round(curPage-count));
+ },
+ paging: function(doc, page) {
+ liberator.reportError(page);
+ var win = doc.defaultView;
+ if (page <= 1) {
+ win.scrollTo(0, 0);
+ } else if (!pager.focusPagenavi(doc, page)) {
+ win.scrollTo(0, win.scrollMaxY);
+ }
+ },
+ focusPagenavi: function(doc, page) {
+ var xpath = '//*[@class="autopagerize_page_info" and child::a[contains(text(), "'+page+'")]]';
+ var [ elem ] = $U.getNodesFromXPath(xpath, doc);
+ var win = doc.defaultView;
+ if(elem) {
+ let p = $U.getElementPosition(elem);
+ win.scrollTo(0, p.top);
+ return true;
+ }
+ return false;
+ },
+ getCurrentPage: function(doc) {
+ var xpath = '//*[@class="autopagerize_page_info"]';
+ var markers = $U.getNodesFromXPath(xpath, doc);
+ var win = doc.defaultView;
+ var curPos = win.scrollY;
+
+ // top of page
+ if(curPos <= 0) return 1.0;
+
+ // bottom of page
+ if(curPos >= win.scrollMaxY) return 1.0 + markers.length;
+
+ // return n.5 if between n and n+1
+ var page = 1.0;
+ for (var i = 0, len = markers.length; i < len; i++) {
+ let p = $U.getElementPosition(markers[i]);
+ if (curPos == p.top) return page+1;
+ if (curPos < p.top) return page+0.5;
+ ++page;
+ }
+ return page+0.5;
+ },
+};
+commands.addUserCommand(["nextpage"], "Autopagerize next page",
+ function(args)
+ pager.next(window.content.document, args.length>0 ? args[0] : 1));
+commands.addUserCommand(["prevpage"], "Autopagerize prev page",
+ function(args)
+ pager.prev(window.content.document, args.length>0 ? args[0] : 1));
+
+if(nextMap) {
+ mappings.addUserMap(pager.modes, [nextMap], "Autopagerize next page",
+ function(count)
+ pager.next(window.content.document, count>0 ? count : 1),
+ {flags: Mappings.flags.COUNT});
+}
+if(prevMap) {
+ mappings.addUserMap(pager.modes, [prevMap], "Autopagerize prev page",
+ function(count)
+ pager.prev(window.content.document, count>0 ? count : 1),
+ {flags: Mappings.flags.COUNT});
+}
+
+})();
+// vim: set fdm=marker sw=4 ts=4 et: