/*** 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.2 GPL 2.1pre 2.1pre http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/marker_reader.js || let g:marker_reader_scroll_ratio = "0.7" ||< mnext, mprev scroll 0.7 * . >|| let g:marker_reader_onload = 0 ||< prevent PageLoad insert markers action. == BUG == - all marker are inserted at top(0,0) on some page. ]]> ; //}}} plugins.marker_reader = (function() { const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; var libly = liberator.plugins.libly; var $U = libly.$U; if (liberator.globalVariables.marker_reader_onload !== 0) { liberator.execute(":autocmd PageLoad .* :minsert", null, true); } var reader = { pageNaviCss: , insertMarkers: function(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.9; let scroll = win.innerHeight * scroll_ratio; let count = Math.ceil(win.scrollMaxY / scroll); let insertPoint = doc.body.firstChild; let markers = []; 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.insertBefore(p, insertPoint); //doc.body.appendChild(p); } return doc.markers = markers; }, removeMarkers: function(doc) { let markers = doc.markers; if (!markers) return false; 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