enable haskell layer
[~bandali/configs] / vimperator / .vimperator / plugin / _smooziee.js
1 //
2 // _smooziee.js
3 //
4 // LICENSE: {{{
5 // Copyright (c) 2009 snaka<snaka.gml@gmail.com>
6 //
7 // distributable under the terms of an MIT-style license.
8 // http://www.opensource.jp/licenses/mit-license.html
9 // }}}
10 //
11 // INFO: {{{
12 var INFO = xml`
13 <plugin name="smooziee" version="0.10.2"
14 href="https://github.com/vimpr/vimperator-plugins/raw/master/_smooziee.js"
15 summary="j,kキーでのスクロールをスムースに"
16 lang="en_US"
17 xmlns="http://vimperator.org/namespaces/liberator">
18 <author email="snaka.gml@gmail.com" homepage="http://vimperator.g.hatena.ne.jp/snaka72/">snaka</author>
19 <project name="Vimperator" minVersion="3.6"/>
20 <license>MIT style license</license>
21 <p>j,k key scrolling to be smoothly.</p>
22 <h3 tag="smooziee_global_variables">Global vriables</h3>
23 <p>You can configure following variable as you like.</p>
24 <dl>
25 <dt>smooziee_scroll_amount</dt><dd>Scrolling amount(unit:px). Default value is 400px.</dd>
26 <dt>smooziee_interval</dt><dd>Scrolling interval(unit:ms). Default value is 20ms.</dd>
27 </dl>
28 <h3 tag="smooziee_example">Example</h3>
29 <p>Set scroll amount is 300px and interval is 10ms.</p>
30 <code><ex><![CDATA[
31 let g:smooziee_scroll_amount="300"
32 let g:smooziee_scroll_interval="10"
33 ]]></ex></code>
34 <h3 tag="smooziee_API">API</h3>
35 <code>smooziee.smoothScrollBy(amount);</code>
36 <p>Example</p>
37 <code><ex><![CDATA[
38 :js liberator.plugins.smooziee.smoothScrollBy(600)
39 :js liberator.plugins.smooziee.smoothScrollBy(-600)
40 ]]></ex></code>
41 </plugin>
42 <plugin name="smooziee" version="0.10.2"
43 href="https://github.com/vimpr/vimperator-plugins/raw/master/_smooziee.js"
44 summary="j,kキーでのスクロールをスムースに"
45 lang="ja"
46 xmlns="http://vimperator.org/namespaces/liberator">
47 <author email="snaka.gml@gmail.com" homepage="http://vimperator.g.hatena.ne.jp/snaka72/">snaka</author>
48 <project name="Vimperator" minVersion="3.6"/>
49 <license>MIT style license</license>
50 <p>普段のj,kキーのスクロールをLDRizeライクにスムースにします。</p>
51 <h3 tag="smooziee_global_variables">グローバル変数</h3>
52 <p>以下の変数を.vimperatorrcなどで設定することで動作を調整することができます。</p>
53 <dl>
54 <dt>smooziee_scroll_amount</dt>
55 <dd>1回にスクロールする幅です(単位:ピクセル)。デフォルトは"400"です。</dd>
56 <dt>smooziee_interval</dt>
57 <dd>スクロール時のアニメーションのインターバルです(単位:ミリ秒)。
58 "1"以上の値を設定します。デフォルトは"20"です。</dd>
59 </dl>
60 <h3 tag="smooziee_example">設定例</h3>
61 <p>スクロール量を300pxに、インターバルを10msに設定します。</p>
62 <code><ex><![CDATA[
63 let g:smooziee_scroll_amount="300"
64 let g:smooziee_scroll_interval="10"
65 ]]></ex></code>
66 <h3 tag="smooziee_API">API</h3>
67 <p>他のキーにマップする場合やスクリプトから呼び出せるようAPIを用意してます。</p>
68 <code>smooziee.smoothScrollBy(amount);</code>
69 <p>Example</p>
70 <code><ex><![CDATA[
71 :js liberator.plugins.smooziee.smoothScrollBy(600)
72 :js liberator.plugins.smooziee.smoothScrollBy(-600)
73 ]]></ex></code>
74 <h3 tag="soomziee_ToDo">ToDo</h3>
75 <ul>
76 <li>読み込みの順番によっては他のプラグインと競合する可能性があるのをなんとかしたい。</li>
77 </ul>
78 </plugin>`;
79 // }}}
80
81 let self = liberator.plugins.smooziee = (function(){
82
83 // Mappings {{{
84 /* mappings.addUserMap(
85 [modes.NORMAL],
86 ["j"],
87 "Smooth scroll down",
88 function(count){
89 self.smoothScrollBy(getScrollAmount() * (count || 1));
90 },
91 {
92 count: true
93 }
94 );
95 mappings.addUserMap(
96 [modes.NORMAL],
97 ["k"],
98 "Smooth scroll up",
99 function(count){
100 self.smoothScrollBy(getScrollAmount() * -(count || 1));
101 },
102 {
103 count: true
104 }
105 );
106 */
107
108 mappings.addUserMap(
109 [modes.NORMAL],
110 ["d"],
111 "Smooth scroll down page",
112 function(count){
113 self.smoothScrollBy(getScrollAmount() * 3.5 * (count || 1));
114 },
115 {
116 count: true
117 }
118 );
119 mappings.addUserMap(
120 [modes.NORMAL],
121 ["u"],
122 "Smooth scroll up page",
123 function(count){
124 self.smoothScrollBy(getScrollAmount() * 3.5 * -(count || 1));
125 },
126 {
127 count: true
128 }
129 );
130 // }}}
131 // PUBLIC {{{
132 var PUBLICS = {
133 smoothScrollBy: function(moment) {
134 win = Buffer.findScrollableWindow();
135 interval = window.eval(liberator.globalVariables.smooziee_scroll_interval || '20');
136 destY = win.scrollY + moment;
137 clearTimeout(next);
138 smoothScroll(moment);
139 }
140 }
141
142 // }}}
143 // PRIVATE {{{
144 var next;
145 var destY;
146 var win;
147 var interval;
148
149 function getScrollAmount() window.eval(liberator.globalVariables.smooziee_scroll_amount || '400');
150
151 function smoothScroll(moment) {
152 if (moment > 0)
153 moment = Math.floor(moment / 2);
154 else
155 moment = Math.ceil(moment / 2);
156
157 win.scrollBy(0, moment);
158
159 if (Math.abs(moment) < 1) {
160 setTimeout(makeScrollTo(win.scrollX, destY), interval);
161 destY = null;
162 return;
163 }
164 next = setTimeout(function() smoothScroll(moment), interval);
165 }
166
167 function makeScrollTo(x, y) function() win.scrollTo(x, y);
168 // }}}
169 return PUBLICS;
170 })();
171 // vim: sw=2 ts=2 et si fdm=marker: