new-tabs: fix bug in tab_bar_kill_buffer
[conkeror.git] / modules / eye-guide.js
blob9fd23edcf62f6d8d5ddd1482709abdd5b176be19
1 /**
2  * (C) Copyright 2009 John J. Foerch
3  *
4  * Use, modification, and distribution are subject to the terms specified in the
5  * COPYING file.
6 **/
8 /*
9  * Example usage:
10  *
11  * require('eye-guide.js');
12  * define_key(content_buffer_normal_keymap, "space", "eye-guide-scroll-down");
13  * define_key(content_buffer_normal_keymap, "back_space", "eye-guide-scroll-up");
14  *
15  */
17 in_module(null);
19 define_variable("eye_guide_interval", 800,
20     "Interval during which the eye guide is visible (in ms). "+
21     "When 0, the eye guide will remain visible.");
23 define_variable("eye_guide_context_size", 50,
24     "Context size in pixels for eye-guide-scroll-down and "+
25     "eye-guide-scroll-up.");
27 interactive("eye-guide-scroll-down",
28     "Alternative to scroll-page-down, displays a guide to help "+
29     "your eyes follow the scroll.",
30     function (I) {
31         let win = I.buffer.focused_frame;
32         let doc = I.buffer.document;
33         let context = eye_guide_context_size;
34         let old_y = win.scrollY;
35         win.scrollBy(0, win.innerHeight - context);
36         if (win.scrollY == old_y)
37             return;
38         if (win.scrollY - old_y < win.innerHeight - context)
39             context = win.innerHeight - (win.scrollY - old_y);
40         let guide = doc.getElementById("__conkeror_eye_guide");
41         if (! guide) {
42             guide = doc.createElementNS(XHTML_NS, "div");
43             guide.id = "__conkeror_eye_guide";
44             doc.documentElement.appendChild(guide);
45         }
46         guide.style.top = '0px';
47         guide.style.height = context+'px';
48         guide.style.display = "block";
49         guide.className = "__conkeror_eye_guide_scroll_down";
50         if (win.eye_guide_timer) {
51             win.clearTimeout(win.eye_guide_timer);
52             win.eye_guide_timer = null;
53         }
54         if (eye_guide_interval != 0) {
55             win.eye_guide_timer = win.setTimeout(
56                 function () {
57                     guide.style.display = "none";
58                 },
59                 eye_guide_interval);
60         }
61     });
63 interactive("eye-guide-scroll-up",
64     "Alternative to scroll-page-up, displays a guide to help "+
65     "your eyes follow the scroll.",
66     function (I) {
67         let win = I.buffer.focused_frame;
68         let doc = I.buffer.document;
69         let context = eye_guide_context_size;
70         let old_y = win.scrollY;
71         win.scrollBy(0, 0 - (win.innerHeight - context));
72         if (win.scrollY == old_y)
73             return;
74         if (old_y - win.scrollY < win.innerHeight - context)
75             context = win.innerHeight - old_y;
76         let guide = doc.getElementById("__conkeror_eye_guide");
77         if (! guide) {
78             guide = doc.createElementNS(XHTML_NS, "div");
79             guide.id = "__conkeror_eye_guide";
80             doc.documentElement.appendChild(guide);
81         }
82         guide.style.top = (win.innerHeight - context) + "px";
83         guide.style.height = context+'px';
84         guide.style.display = "block";
85         guide.className = "__conkeror_eye_guide_scroll_up";
86         if (win.eye_guide_timer) {
87             win.clearTimeout(win.eye_guide_timer);
88             win.eye_guide_timer = null;
89         }
90         if (eye_guide_interval != 0) {
91             win.eye_guide_timer = win.setTimeout(
92                 function () {
93                     guide.style.display = "none";
94                 },
95                 eye_guide_interval);
96         }
97     });
99 provide("eye-guide");