Code

da47a6ac3c57fa6c5b6afc3b50afd55b2bc914e5
[collectd.git] / contrib / collection3 / share / navigate.js
1 function nav_init (time_begin, time_end)
2 {
3   var all_images;
4   var i;
6   all_images = document.getElementsByTagName ("img");
7   for (i = 0; i < all_images.length; i++)
8   {
9     if (all_images[i].className != "graph_image")
10       continue;
12     all_images[i].navTimeBegin = new Number (time_begin);
13     all_images[i].navTimeEnd   = new Number (time_end);
15     all_images[i].navBaseURL = all_images[i].src.replace (/;(begin|end)=[^;]*/g, '');
17     if (all_images[i].addEventListener) /* Mozilla */
18       all_images[i].addEventListener ('DOMMouseScroll', nav_handle_wheel,
19           false /* == bubbling */);
20     all_images[i].onmousewheel = nav_handle_wheel;
21   }
23   return (true);
24 } /* nav_init */
26 function nav_image_repaint (img)
27 {
28   if (!img || !img.navBaseURL
29       || !img.navTimeBegin || !img.navTimeEnd)
30     return;
32   img.src = img.navBaseURL + ";"
33     + "begin=" + img.navTimeBegin.toFixed (0) + ";"
34     + "end=" + img.navTimeEnd.toFixed (0);
35 } /* nav_image_repaint */
37 function nav_time_reset (img_id ,diff)
38 {
39   var img;
41   img = document.getElementById (img_id);
42   if (!img)
43     return (false);
45   img.navTimeEnd = new Number ((new Date ()).getTime () / 1000);
46   img.navTimeBegin = new Number (img.navTimeEnd - diff);
48   nav_image_repaint (img);
50   return (true);
51 }
53 function nav_time_change_obj (img, factor_begin, factor_end)
54 {
55   var diff;
57   if (!img)
58     return (false);
60   if (!img.navTimeEnd || !img.navTimeBegin)
61     return (false);
63   diff = img.navTimeEnd - img.navTimeBegin;
65   /* Prevent zooming in if diff is less than five minutes */
66   if ((diff <= 300) && (factor_begin > 0.0) && (factor_end < 0.0))
67     return (true);
69   img.navTimeBegin += (diff * factor_begin);
70   img.navTimeEnd   += (diff * factor_end);
72   img.src = img.navBaseURL + ";"
73     + "begin=" + img.navTimeBegin.toFixed (0) + ";"
74     + "end=" + img.navTimeEnd.toFixed (0);
76   return (true);
77 } /* nav_time_change */
79 function nav_time_change (img_id, factor_begin, factor_end)
80 {
81   var diff;
83   if (img_id == '*')
84   {
85     var all_images;
87     all_images = document.getElementsByTagName ("img");
88     for (i = 0; i < all_images.length; i++)
89     {
90       if (all_images[i].className != "graph_image")
91         continue;
92     
93       nav_time_change_obj (all_images[i], factor_begin, factor_end);
94     }
95   }
96   else
97   {
98     var img;
100     img = document.getElementById (img_id);
101     if (!img)
102       return (false);
104     nav_time_change_obj (img, factor_begin, factor_end);
105   }
107   return (true);
108 } /* nav_time_change */
110 function nav_move_earlier (img_id)
112   return (nav_time_change (img_id, -0.2, -0.2));
113 } /* nav_move_earlier */
115 function nav_move_later (img_id)
117   return (nav_time_change (img_id, +0.2, +0.2));
118 } /* nav_move_later */
120 function nav_zoom_in (img_id)
122   return (nav_time_change (img_id, +0.2, -0.2));
123 } /* nav_zoom_in */
125 function nav_zoom_out (img_id)
127   return (nav_time_change (img_id, (-1.0 / 3.0), (1.0 / 3.0)));
128 } /* nav_zoom_in */
130 function nav_recenter (e)
132   var x;
133   var y;
134   var img;
135   var diff;
136   var time_old_center;
137   var time_new_center;
138   var width;
140   img = e.target;
141   if (!img || (img.className != "graph_image")
142       || !img.navTimeBegin || !img.navTimeEnd)
143     return;
145   width = img.width - 97;
147   x = e.layerX - 70;
148   if (!x || (x < 0) || (x > width))
149     return;
151   y = e.layerY;
152   if (!y || (y < 35) || (y > 135))
153     return;
155   diff = img.navTimeEnd - img.navTimeBegin;
157   time_old_center = img.navTimeBegin + (diff / 2.0);
158   time_new_center = img.navTimeBegin + (x * diff / width);
160   img.navTimeBegin += (time_new_center - time_old_center);
161   img.navTimeEnd   += (time_new_center - time_old_center);
162 } /* nav_recenter */
164 function nav_handle_dblclick (e)
166   var img;
168   /* M$IE */
169   if (!e)
170     e = window.event;
172   img = e.target;
173   if (!img || (img.className != "graph_image")
174       || !img.navTimeBegin || !img.navTimeEnd)
175     return;
177   nav_recenter (e);
178   nav_image_repaint (img);
180   // e.returnValue = false;
181 } /* nav_handle_dblclick */
183 /* Taken from <http://adomas.org/javascript-mouse-wheel/> */
184 function nav_handle_wheel (e)
186   var delta = 0;
187   var img;
188   
189   /* M$IE */
190   if (!e)
191     e = window.event;
193   img = e.target;
194   if (!img || (img.className != "graph_image")
195       || !img.navTimeBegin || !img.navTimeEnd)
196     return;
198   /* Opera and M$IE */
199   if (e.wheelDelta)
200   {
201     delta = e.wheelDelta; 
202     if (window.opera)
203       delta = delta * (-1);
204   }
205   else if (e.detail)
206   {
207     delta = e.detail * (-1);
208   }
210   if (!delta)
211     return;
213   nav_recenter (e);
214   if (delta > 0)
215     nav_zoom_in (img.id);
216   else
217     nav_zoom_out (img.id);
219   if (e.preventDefault)
220     e.preventDefault ();
221   e.returnValue = false;
222 } /* function nav_handle_wheel */
224 /* vim: set sw=2 sts=2 et : */