/*** 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.15 GPL 2.2pre 2.2pre 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 <|| let g:marker_reader_mapping = "J,K" ||< adds mapping J = mnext, K = mprev. ]]> ; //}}} 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 have to act synchronized function insertMarkers: function(doc) { // this operation have to atomic { if (doc.markers) return false; doc.markers = []; // } 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 div = doc.createElementNS(HTML_NAMESPACE, "div"); div.id = "vimperator-marker_reader-markers"; for (let pageNum=2;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.setAttribute("mousethrough", "always"); //p.innerHTML = ""; } p.className = "vimperator-marker_reader-marker"; p.style.left = "0px"; p.style.top = Math.ceil((pageNum-1)*scroll)+"px"; div.appendChild(p); doc.markers.push(p); } doc.body.appendChild(div); return doc.markers; }, // removeMarkers have to act synchronized function removeMarkers: function(doc) { // this operation have to atomic { if (!doc.markers) return false; doc.markers = null; // } doc.body.removeChild(doc.getElementById("vimperator-marker_reader-markers")); let win = doc.defaultView; let frames = win.frames; if (frames) { for (let i=0,len=frames.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 = 2.0; for (let i=0,len=markers.length;i1 ? count : 1); }, {count: true}); mappings.addUserMap([config.browserModes], [up], "marker PageUp", function (count) { reader.focusNavi(focusDocument(content), -(count>1 ? count : 1)); }, {count: true}); } 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) { reader.setAutoInsert(true); } return reader; })(); // vim: fdm=marker sw=4 ts=4 et: 'n170' href='#n170'>170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209