From bef92fac32b1d4c1a80cb37f82625546b9493426 Mon Sep 17 00:00:00 2001 From: hogelog Date: Sun, 12 Apr 2009 03:22:17 +0000 Subject: * add marker_reader.js: insert marker to page. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@32303 d0d07461-0603-4401-acd4-de1884942a52 --- marker_reader.js | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 marker_reader.js (limited to 'marker_reader.js') diff --git a/marker_reader.js b/marker_reader.js new file mode 100644 index 0000000..89626f2 --- /dev/null +++ b/marker_reader.js @@ -0,0 +1,161 @@ +/*** BEGIN LICENSE BLOCK {{{ + Copyright (c) 2009 hogelog + + Released under the GPL license + http://www.gnu.org/copyleft/gpl.html +}}} END LICENSE BLOCK ***/ +// PLUGIN_INFO//{{{ +var PLUGIN_INFO = + + {NAME} + marker PageDown/PageUp. + hogelog + 0.0.1 + GPL + 2.1pre + 2.1pre + http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/marker_reader.js + +; +//}}} +(function() { + + const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; + + let libly = liberator.plugins.libly; + let $U = libly.$U; + + let pageNaviCss = + ; + + function insertMarkers(doc) + { + let win = doc.defaultView; + doc.naviMarker = true; + + let css = $U.xmlToDom(pageNaviCss, doc); + let node = doc.importNode(css, true); + doc.body.insertBefore(node, doc.body.firstChild); + + let scroll_ratio = parseFloat(liberator.globalVariables.marker_reader_scroll_ratio) || 0.7; + let scroll = win.innerHeight * scroll_ratio; + let count = Math.ceil(win.scrollMaxY / scroll); + + for (let pageNum=1;pageNum<=count+1;++pageNum) + { + let p = doc.createElementNS(HTML_NAMESPACE, "p"); + let id = "vimperator-marker_reader-" + pageNum; + p.id = id; + p.innerHTML = '' + pageNum + ""; + p.className = "vimperator-marker_reader-marker"; + + p.style.left = 0; + p.style.top = (pageNum-1)*scroll; + p.style.zIndex = 1000; + doc.body.appendChild(p); + } + } + function removeMarkers(doc) + { + let xpath = '//*[@class="vimperator-marker_reader-marker"]'; + let markers = $U.getNodesFromXPath(xpath, doc); + for (let i=0,len=markers.length;i= win.scrollMaxY) { + if (markers.length > 0) { + let lastMarker = Math.round(parseFloat(markers[markers.length-1].style.top)); + if (curPos <= lastMarker) return markers.length; + } + return markers.length + 0.5; + } + + // return n.5 if between n and n+1 + var page = 1.0; + for (let i=0,len=markers.length;i