Changeset 32310
- Timestamp:
- 04/12/09 20:11:25 (4 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
lang/javascript/vimperator-plugins/trunk/marker_reader.js
r32303 r32310 11 11 <description>marker PageDown/PageUp.</description> 12 12 <author mail="konbu.komuro@gmail.com" homepage="http://d.hatena.ne.jp/hogelog/">hogelog</author> 13 <version>0.0. 1</version>13 <version>0.0.2</version> 14 14 <license>GPL</license> 15 15 <minVersion>2.1pre</minVersion> … … 17 17 <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/marker_reader.js</updateURL> 18 18 <detail><![CDATA[ 19 == TODO == 20 enable setting: 19 20 == OPTION == 21 >|| 22 let g:marker_reader_scroll_ratio = "0.7" 23 ||< 24 mnext, mprev scroll 0.7 * <screen height>. 25 26 >|| 27 let g:marker_reader_onload = 0 28 ||< 29 prevent PageLoad insert markers action. 30 31 == BUG == 32 - all marker are inserted at top(0,0) on some page. 21 33 ]]></detail> 22 34 </VimperatorPlugin>; 23 35 //}}} 24 (function() {36 plugins.marker_reader = (function() { 25 37 26 const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";38 const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; 27 39 28 letlibly = liberator.plugins.libly;29 let$U = libly.$U;40 var libly = liberator.plugins.libly; 41 var $U = libly.$U; 30 42 31 let pageNaviCss = 32 <style type="text/css"><![CDATA[ 33 .vimperator-marker_reader-marker { 43 if (liberator.globalVariables.marker_reader_onload !== 0) { 44 liberator.execute(":autocmd PageLoad .* :minsert", null, true); 45 } 46 47 var reader = { 48 pageNaviCss: 49 <style type="text/css"><![CDATA[ 50 .vimperator-marker_reader-marker { 34 51 background-color: #faa; 35 52 opacity: 0.30; … … 42 59 position: absolute; 43 60 -moz-border-radius: 5px; 44 } 45 ]]></style>; 46 47 function insertMarkers(doc) 61 } 62 ]]></style>, 63 insertMarkers: function(doc) 48 64 { 49 65 let win = doc.defaultView; … … 54 70 doc.body.insertBefore(node, doc.body.firstChild); 55 71 56 let scroll_ratio = parseFloat(liberator.globalVariables.marker_reader_scroll_ratio) || 0. 7;72 let scroll_ratio = parseFloat(liberator.globalVariables.marker_reader_scroll_ratio) || 0.9; 57 73 let scroll = win.innerHeight * scroll_ratio; 58 74 let count = Math.ceil(win.scrollMaxY / scroll); 59 75 76 let insertPoint = doc.body.firstChild; 77 let markers = []; 60 78 for (let pageNum=1;pageNum<=count+1;++pageNum) 61 79 { … … 69 87 p.style.top = (pageNum-1)*scroll; 70 88 p.style.zIndex = 1000; 71 doc.body.appendChild(p); 89 doc.body.insertBefore(p, insertPoint); 90 //doc.body.appendChild(p); 72 91 } 73 } 74 function removeMarkers(doc) 92 return doc.markers = markers; 93 }, 94 removeMarkers: function(doc) 75 95 { 76 let xpath = '//*[@class="vimperator-marker_reader-marker"]';77 let markers = $U.getNodesFromXPath(xpath, doc);96 let markers = doc.markers; 97 if (!markers) return false; 78 98 for (let i=0,len=markers.length;i<len;++i) 79 99 { 80 100 doc.body.removeChild(markers[i]); 81 101 } 82 } 83 function currentPage(doc) 102 return true; 103 }, 104 currentPage: function(doc) 84 105 { 85 let xpath = '//*[@class="vimperator-marker_reader-marker"]'; 86 let markers = $U.getNodesFromXPath(xpath, doc); 106 let markers = doc.markers; 87 107 let win = doc.defaultView; 88 108 … … 111 131 } 112 132 return page - 0.5; 113 } 114 f unction focusNavi(doc, count)133 }, 134 focusNavi: function(doc, count) 115 135 { 116 if (!doc.naviMarker) { 117 insertMarkers(doc); 136 function navi(win, page) 137 { 138 let xpath = '//*[@id="vimperator-marker_reader-' + page + '"]'; 139 let [elem] = $U.getNodesFromXPath(xpath, doc); 140 if (elem) { 141 let p = $U.getElementPosition(elem); 142 win.scrollTo(0, p.top); 143 return true; 144 } 145 return false; 118 146 } 119 120 147 let win = doc.defaultView; 121 148 let curPage = currentPage(doc); … … 124 151 win.scrollTo(0, 0); 125 152 return true; 126 } 127 let id_xpath = '//*[@id="vimperator-marker_reader-' + page + '"]'; 128 let [elem] = $U.getNodesFromXPath(id_xpath, doc); 129 if (elem) { 130 let p = $U.getElementPosition(elem); 131 win.scrollTo(0, p.top); 153 } else if (navi(win, page)) { 132 154 return true; 133 155 } 134 156 135 // reload markers136 157 removeMarkers(doc); 137 158 insertMarkers(doc); 138 [elem] = $U.getNodesFromXPath(id_xpath, doc); 139 if (elem) { 140 let p = $U.getElementPosition(elem); 141 win.scrollTo(0, p.top); 142 return true; 143 } 159 if (navi(win, page)) return true; 144 160 145 161 win.scrollTo(0, win.scrollMaxY); 146 162 return true; 147 } 148 commands.addUserCommand(["markernext", "mnext"], "marker PageDown", 149 function () 150 { 151 focusNavi(content.document, 1); 152 }); 153 commands.addUserCommand(["markerprev", "mprev"], "marker PageUp", 154 function () 155 { 156 focusNavi(content.document, -1); 157 }); 163 }, 164 }; 158 165 166 commands.addUserCommand(["markersinsert", "minsert"], "insert markers", 167 function () 168 { 169 reader.insertMarkers(content.document); 170 }); 171 commands.addUserCommand(["markersremove", "mremove"], "remove markers", 172 function () 173 { 174 reader.removeMarkers(content.document); 175 }); 176 commands.addUserCommand(["markernext", "mnext"], "marker PageDown", 177 function () 178 { 179 reader.focusNavi(content.document, 1); 180 }); 181 commands.addUserCommand(["markerprev", "mprev"], "marker PageUp", 182 function () 183 { 184 reader.focusNavi(content.document, -1); 185 }); 159 186 187 return reader; 160 188 })(); 161 189 // vim: fdm=marker sw=4 ts=4 et:
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)