From 6924482b46202070b56af5825ed75cd04a665884 Mon Sep 17 00:00:00 2001 From: hogelog Date: Tue, 20 Jan 2009 10:18:16 +0000 Subject: * 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 --- autopagerize_controll.js | 111 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 autopagerize_controll.js (limited to 'autopagerize_controll.js') 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 = + + {NAME} + controll autopagerize + hogelog + 0.0.1 + 2.0pre + http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/autopagerize_controll.js + || + let g:autopagerize_prevmap = "J" + let g:autopagerize_nextmap = "K" +||< + +== Commands == +autopagerize_next: + paging next page +autopagerize_prev: + paging prev page + +== TODO == + + ]]> +; +//}}} +(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: -- cgit v1.2.3