Changeset 32310

Show
Ignore:
Timestamp:
04/12/09 20:11:25 (4 years ago)
Author:
hogelog
Message:
  • insert markers on PageLoad?.
  • add commands: markersinsert, markersremove.
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/vimperator-plugins/trunk/marker_reader.js

    r32303 r32310  
    1111    <description>marker PageDown/PageUp.</description> 
    1212    <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> 
    1414    <license>GPL</license> 
    1515    <minVersion>2.1pre</minVersion> 
     
    1717    <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/marker_reader.js</updateURL> 
    1818<detail><![CDATA[ 
    19 == TODO == 
    20 enable setting: 
     19     
     20== OPTION == 
     21>|| 
     22let g:marker_reader_scroll_ratio = "0.7" 
     23||< 
     24mnext, mprev scroll 0.7 * <screen height>. 
     25 
     26>|| 
     27let g:marker_reader_onload = 0 
     28||< 
     29prevent PageLoad insert markers action. 
     30 
     31== BUG == 
     32    - all marker are inserted at top(0,0) on some page. 
    2133]]></detail> 
    2234</VimperatorPlugin>; 
    2335//}}} 
    24 (function() { 
     36plugins.marker_reader = (function() { 
    2537 
    26     const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; 
     38const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; 
    2739 
    28     let libly = liberator.plugins.libly; 
    29     let $U = libly.$U; 
     40var libly = liberator.plugins.libly; 
     41var $U = libly.$U; 
    3042 
    31     let pageNaviCss = 
    32         <style type="text/css"><![CDATA[ 
    33           .vimperator-marker_reader-marker { 
     43if (liberator.globalVariables.marker_reader_onload !== 0) { 
     44    liberator.execute(":autocmd PageLoad .* :minsert", null, true); 
     45} 
     46 
     47var reader = { 
     48    pageNaviCss: 
     49    <style type="text/css"><![CDATA[ 
     50        .vimperator-marker_reader-marker { 
    3451            background-color: #faa; 
    3552            opacity: 0.30; 
     
    4259            position: absolute; 
    4360            -moz-border-radius: 5px; 
    44           } 
    45           ]]></style>; 
    46  
    47     function insertMarkers(doc) 
     61        } 
     62        ]]></style>, 
     63    insertMarkers: function(doc) 
    4864    { 
    4965        let win = doc.defaultView; 
     
    5470        doc.body.insertBefore(node, doc.body.firstChild); 
    5571 
    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; 
    5773        let scroll = win.innerHeight * scroll_ratio; 
    5874        let count = Math.ceil(win.scrollMaxY / scroll); 
    5975 
     76        let insertPoint = doc.body.firstChild; 
     77        let markers = []; 
    6078        for (let pageNum=1;pageNum<=count+1;++pageNum) 
    6179        { 
     
    6987            p.style.top = (pageNum-1)*scroll; 
    7088            p.style.zIndex = 1000; 
    71             doc.body.appendChild(p); 
     89            doc.body.insertBefore(p, insertPoint); 
     90            //doc.body.appendChild(p); 
    7291        } 
    73     } 
    74     function removeMarkers(doc) 
     92        return doc.markers = markers; 
     93    }, 
     94    removeMarkers: function(doc) 
    7595    { 
    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; 
    7898        for (let i=0,len=markers.length;i<len;++i) 
    7999        { 
    80100            doc.body.removeChild(markers[i]); 
    81101        } 
    82     } 
    83     function currentPage(doc) 
     102        return true; 
     103    }, 
     104    currentPage: function(doc) 
    84105    { 
    85         let xpath = '//*[@class="vimperator-marker_reader-marker"]'; 
    86         let markers = $U.getNodesFromXPath(xpath, doc); 
     106        let markers = doc.markers; 
    87107        let win = doc.defaultView; 
    88108 
     
    111131        } 
    112132        return page - 0.5; 
    113     } 
    114     function focusNavi(doc, count) 
     133    }, 
     134    focusNavi: function(doc, count) 
    115135    { 
    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; 
    118146        } 
    119  
    120147        let win = doc.defaultView; 
    121148        let curPage = currentPage(doc); 
     
    124151            win.scrollTo(0, 0); 
    125152            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)) { 
    132154            return true; 
    133155        } 
    134156 
    135         // reload markers 
    136157        removeMarkers(doc); 
    137158        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; 
    144160 
    145161        win.scrollTo(0, win.scrollMaxY); 
    146162        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}; 
    158165 
     166commands.addUserCommand(["markersinsert", "minsert"], "insert markers", 
     167    function () 
     168    { 
     169        reader.insertMarkers(content.document); 
     170    }); 
     171commands.addUserCommand(["markersremove", "mremove"], "remove markers", 
     172    function () 
     173    { 
     174        reader.removeMarkers(content.document); 
     175    }); 
     176commands.addUserCommand(["markernext", "mnext"], "marker PageDown", 
     177    function () 
     178    { 
     179        reader.focusNavi(content.document, 1); 
     180    }); 
     181commands.addUserCommand(["markerprev", "mprev"], "marker PageUp", 
     182    function () 
     183    { 
     184        reader.focusNavi(content.document, -1); 
     185    }); 
    159186 
     187return reader; 
    160188})(); 
    161189// vim: fdm=marker sw=4 ts=4 et: