/*** 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.11 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. >|| javascript < ; //}}} plugins.marker_reader = (function() { const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; var libly = liberator.plugins.libly; var $U = libly.$U; var logger = $U.getLogger("marker"); let ignorePages = liberator.globalVariables.marker_reader_ignore || [/^https?:\/\/mail\.google\.com\//, /^http:\/\/(?:reader\.livedoor|fastladder)\.com\/(?:reader|public)\//]; function near(p1, p2, e) p1-e <= p2 && p2 <= p1+e; function focusDocument(win) { let frames = win.frames; if (!frames) return win.document; for (let i=0,len=win.frames.length;i, insertMarkers: function(doc) { let win = doc.defaultView; if (win.scrollMaxY == 0) return false; if (win.innerHeight == 0) return false; if (!win.scrollbars.visible) return false; let css = $U.xmlToDom(reader.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 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; if (liberator.globalVariables.marker_reader_pagelink) { p.innerHTML = '' + pageNum + ""; } else { //p.innerHTML = ""; } p.className = "vimperator-marker_reader-marker"; p.style.left = "0px"; p.style.top = Math.ceil((pageNum-1)*scroll)+"px"; doc.body.appendChild(p); markers.push(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 = markers[markers.length-1].offsetTop; if (curPos <= lastMarker) return markers.length; } return markers.length + 0.5; } // return n.5 if between n and n+1 let page = 1.0; for (let i=0,len=markers.length;i1 ? count : 1); }, {flags: Mappings.flags.COUNT}); mappings.addUserMap([config.browserModes], [up], "marker PageUp", function (count) { reader.focusNavi(focusDocument(content), -(count>1 ? count : 1)); }, {flags: Mappings.flags.COUNT}); } commands.addUserCommand(["markersinsert", "minsert"], "insert markers", function () { reader.insertMarkers(focusDocument(content)); }); commands.addUserCommand(["markersremove", "mremove"], "remove markers", function () { reader.removeMarkers(focusDocument(content)); }); commands.addUserCommand(["markernext", "mnext"], "marker PageDown", function () { reader.focusNavi(focusDocument(content), 1); }); commands.addUserCommand(["markerprev", "mprev"], "marker PageUp", function () { reader.focusNavi(focusDocument(content), -1); }); if (liberator.globalVariables.marker_reader_onload !== 0) { function autoInsert(win) { //if (win.frameElement) return; let uri = win.location.href; if (ignorePages.some(function(r) r.test(uri))) return; let doc = win.document; if (!(doc instanceof HTMLDocument)) return; if (doc.contentType != "text/html") return; reader.removeMarkers(doc); reader.insertMarkers(doc); let frames = win.frames; for (let i=0,len=frames.length;i