*** empty log message ***
[booh] / html_merges.rb
1 #
2 #                         *  BOOH  *
3 #
4 # A.k.a `Best web-album Of the world, Or your money back, Humerus'.
5 #
6 # The acronyn sucks, however this is a tribute to Dragon Ball by
7 # Akira Toriyama, where the last enemy beaten by heroes of Dragon
8 # Ball is named "Boo". But there was already a free software project
9 # called Boo, so this one will be it "Booh". Or whatever.
10 #
11 #
12 # Copyright (c) 2004 Guillaume Cottenceau <gc3 at bluewin.ch>
13 #
14 # This software may be freely redistributed under the terms of the GNU
15 # public license version 2.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21 # holds static data to merge in the html "themes"
22
23 require 'gettext'
24 bindtextdomain("booh")
25
26 $head_code = <<'EOF'
27 <link rev="made" href="http://zarb.org/~gc/html/booh.html" />
28 <script language="JavaScript1.1" type="text/JavaScript">
29
30 var images = new Array(~~images~~);
31 var captions = new Array(~~captions~~);
32
33 var images_ary = new Array();
34 var images_loaded = new Array();
35 var current = 0;
36 var slideshow = 0;
37 var slideshow_pause = 3;
38
39 for (i = 0; i < images.length; i++) { 
40     /* this array will contain 0 if image not yet loaded, 1 when loading,
41      * 2 when complete */
42     images_loaded[i] = 0;
43 }
44
45 function dbg(t) {
46     document.getElementById('dbg_text').firstChild.data += t + "\n";
47 }
48
49 /* load image, return 1 if image is finished loading */
50 function load(i) {
51     if (images_loaded[i] == 0) {
52         images_ary[i] = new Image();
53         images_ary[i].src = images[i];
54         images_loaded[i] = 1;
55     }
56     if (images_loaded[i] == 1) {
57         if (images_ary[i].complete) {
58             images_loaded[i] = 2;
59         } else {
60             return 0;
61         }
62     }
63     return 1;
64 }
65
66 function preload() { 
67
68     /* favor current image, if user clicked on `last' or something */
69     load(current);
70
71     for (i = 0; i < images.length; i++) { 
72         /* don't blindly preload all images at the beginning,
73          * but rather load them one by one, in order to get
74          * next ones faster
75          */
76         if (load(i) == 0) {
77             setTimeout("preload()", 500);
78             return;
79         }
80     }
81 }
82
83 function init() {
84     preload();
85   
86     /* retrieve GET parameters */
87     all_params = location.href.split("?")
88     if (all_params.length > 1) {
89         params = all_params[1].split("&");
90         for (i = 0; i < params.length; i++) {
91             keyvalue = params[i].split("=");
92             if (keyvalue[0] == "slideshow_pause") {
93                 slideshow_pause = keyvalue[1];
94             }
95         }
96     }
97 }
98
99 function update_sensibilities() {
100     if (current == 0) {
101         document.getElementById("b_first").disabled = true;
102         document.getElementById("b_previous").disabled = true;
103         document.getElementById("b_next").disabled = false;
104         document.getElementById("b_last").disabled = false;
105     } else if (current == images.length - 1) {
106         document.getElementById("b_first").disabled = false;
107         document.getElementById("b_previous").disabled = false;
108         document.getElementById("b_next").disabled = true;
109         document.getElementById("b_last").disabled = true;
110     } else {
111         document.getElementById("b_first").disabled = false;
112         document.getElementById("b_previous").disabled = false;
113         document.getElementById("b_next").disabled = false;
114         document.getElementById("b_last").disabled = false;
115     }
116 }
117
118 function set_cursor_(value, element) {
119
120     if (!element || !element.style) {
121         return;
122     }
123
124     element.style.cursor = value;
125
126     children = element.childNodes;
127     for (i = 0; i < children.length; i++) {
128         set_cursor_(value, children.item[i]);
129     }
130 }
131
132 function set_cursor(value) {
133     set_cursor_(value, document.getElementById('body'));
134 }
135
136 function show_current_text() {
137     /* don't show text if image not yet loaded because navigator
138      * won't refresh it during load */
139     if (images_loaded[current] == 2) {
140         eval("document.getElementById('image_counter')" +
141                      ".firstChild.data = '" + ( current + 1 ) + "/" + images.length + "'");
142         eval("document.getElementById('main_text')" +
143                      ".firstChild.data = '" + ( captions[current] || images[current] ) + "'");
144         set_cursor("default");
145     } else {
146         setTimeout("show_current_text()", 100);
147         set_cursor("wait");
148     }
149 }
150
151 function display_current() {
152     eval("document.main_img.src = images[" + current + "]");
153     show_current_text();
154     update_sensibilities();
155 }
156
157 function first() {
158     if (slideshow == 1) {
159         toggle_slideshow();
160     }
161     
162     current = 0;
163     display_current();
164 }
165
166 function next() {
167     if (slideshow == 1) {
168         toggle_slideshow();
169     }
170
171     if (current < images.length - 1) {
172         current++;
173         display_current();
174     }
175 }
176
177 function previous() {
178     if (slideshow == 1) {
179         toggle_slideshow();
180     }
181
182     if (current > 0) {
183         current--;
184         display_current();
185     }
186 }
187
188 function last() {
189     if (slideshow == 1) {
190         toggle_slideshow();
191     }
192
193     current = images.length - 1;
194     display_current();
195 }
196
197 function toggle_slideshow() {
198     if (slideshow == 0) {
199         document.getElementById("b_slideshow").value = "~~stop_slideshow~~";
200         slideshow = 1;
201         if (current == images.length - 1) {
202             current = -1;
203         }
204         run_slideshow();
205     } else {
206         document.getElementById("b_slideshow").value = "~~run_slideshow~~";
207         slideshow = 0;
208     }
209 }
210
211 function run_slideshow() {
212     if (slideshow == 0) {
213         return;
214     }
215
216     if (images_loaded[current + 1] == 2) {
217         current++;
218         display_current();
219         setTimeout("run_slideshow()", slideshow_pause * 1000);
220     } else {
221         setTimeout("run_slideshow()", 500);
222     }
223
224     if (current == images.length - 1) {
225         toggle_slideshow();
226     }
227 }
228 </script>
229 EOF
230
231 $head_code.sub!('~~run_slideshow~~', _('Run slideshow!'))
232 $head_code.sub!('~~stop_slideshow~~', _('Stop slideshow'))
233
234 $body_additions = <<'EOF'
235 onload="init()" id="body"
236 EOF
237
238 $button_first = '
239     <form><input type="button"
240                  onclick="first()"
241                  value="' + _('<<- First') + '"
242                  id="b_first"></form>';
243
244 $button_previous = '
245     <form><input type="button"
246                  onclick="previous()"
247                  value="' + _('<- Previous') + '"
248                  id="b_previous"></form>';
249
250 $button_next = '
251     <form><input type="button"
252                  onclick="next()"
253                  value="' + _('Next ->') + '"
254                  id="b_next"></form>';
255
256 $button_last = '
257     <form><input type="button"
258                  onclick="last()"
259                  value="' + _('Last ->>') + '"
260                  id="b_last"></form>';
261
262 $button_slideshow = '
263   <form><input type="button"
264                onclick="toggle_slideshow()"
265                value="' + _('Run slideshow!') + '"
266                id="b_slideshow">
267   </form>';
268
269 $image = <<'EOF'
270   <img name="main_img">
271 EOF
272
273 $image_counter_additions = <<'EOF'
274   id="image_counter"
275 EOF
276
277 $caption_additions = <<'EOF'
278   id="main_text"
279 EOF
280
281 $body_code = <<'EOF'
282   <script language="JavaScript1.1" type="text/JavaScript">
283     display_current();
284   </script>
285 EOF
286