a721c90a0eeae6281d492f25e28ad9269c13dbfc
[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 $head_code = <<'EOF'
24 <link rev="made" href="http://zarb.org/~gc/html/booh.html" />
25 <script language="JavaScript1.1" type="text/JavaScript">
26
27 var images = new Array(~~images~~);
28
29 var images_ary = new Array();
30 var images_loaded = new Array();
31 var current = 0;
32 var slideshow = 0;
33 var slideshow_pause = 3;
34
35 for (i = 0; i < images.length; i++) { 
36     /* this array will contain 0 if image not yet loaded, 1 when loading,
37      * 2 when complete */
38     images_loaded[i] = 0;
39 }
40
41 function dbg(t) {
42     document.getElementById('dbg_text').firstChild.data += t + "\n";
43 }
44
45 /* load image, return 1 if image is finished loading */
46 function load(i) {
47     if (images_loaded[i] == 0) {
48         images_ary[i] = new Image();
49         images_ary[i].src = images[i];
50         images_loaded[i] = 1;
51     }
52     if (images_loaded[i] == 1) {
53         if (images_ary[i].complete) {
54             images_loaded[i] = 2;
55         } else {
56             return 0;
57         }
58     }
59     return 1;
60 }
61
62 function preload() { 
63
64     /* favor current image, if user clicked on `last' or something */
65     load(current);
66
67     for (i = 0; i < images.length; i++) { 
68         /* don't blindly preload all images at the beginning,
69          * but rather load them one by one, in order to get
70          * next ones faster
71          */
72         if (load(i) == 0) {
73             setTimeout("preload()", 500);
74             return;
75         }
76     }
77 }
78
79 function init() {
80     preload();
81   
82     /* retrieve GET parameters */
83     all_params = location.href.split("?")
84     if (all_params.length > 1) {
85         params = all_params[1].split("&");
86         for (i = 0; i < params.length; i++) {
87             keyvalue = params[i].split("=");
88             if (keyvalue[0] == "slideshow_pause") {
89                 slideshow_pause = keyvalue[1];
90             }
91         }
92     }
93 }
94
95 function update_sensibilities() {
96     if (current == 0) {
97         document.getElementById("b_first").disabled = true;
98         document.getElementById("b_previous").disabled = true;
99         document.getElementById("b_next").disabled = false;
100         document.getElementById("b_last").disabled = false;
101     } else if (current == images.length - 1) {
102         document.getElementById("b_first").disabled = false;
103         document.getElementById("b_previous").disabled = false;
104         document.getElementById("b_next").disabled = true;
105         document.getElementById("b_last").disabled = true;
106     } else {
107         document.getElementById("b_first").disabled = false;
108         document.getElementById("b_previous").disabled = false;
109         document.getElementById("b_next").disabled = false;
110         document.getElementById("b_last").disabled = false;
111     }
112 }
113
114 function set_cursor_(value, element) {
115
116     if (!element || !element.style) {
117         return;
118     }
119
120     element.style.cursor = value;
121
122     children = element.childNodes;
123     for (i = 0; i < children.length; i++) {
124         set_cursor_(value, children.item[i]);
125     }
126 }
127
128 function set_cursor(value) {
129     set_cursor_(value, document.getElementById('body'));
130 }
131
132 function show_current_text() {
133     /* don't show text if image not yet loaded because navigator
134      * won't refresh it during load */
135     if (images_loaded[current] == 2) {
136         eval("document.getElementById('main_text')" +
137                      ".firstChild.data = '" + images[current] + "'");
138         set_cursor("default");
139     } else {
140         setTimeout("show_current_text()", 100);
141         set_cursor("wait");
142     }
143 }
144
145 function display_current() {
146     eval("document.main_img.src = images[" + current + "]");
147     show_current_text();
148     update_sensibilities();
149 }
150
151 function first() {
152     if (slideshow == 1) {
153         toggle_slideshow();
154     }
155     
156     current = 0;
157     display_current();
158 }
159
160 function next() {
161     if (slideshow == 1) {
162         toggle_slideshow();
163     }
164
165     if (current < images.length - 1) {
166         current++;
167         display_current();
168     }
169 }
170
171 function previous() {
172     if (slideshow == 1) {
173         toggle_slideshow();
174     }
175
176     if (current > 0) {
177         current--;
178         display_current();
179     }
180 }
181
182 function last() {
183     if (slideshow == 1) {
184         toggle_slideshow();
185     }
186
187     current = images.length - 1;
188     display_current();
189 }
190
191 function toggle_slideshow() {
192     if (slideshow == 0) {
193         document.getElementById("b_slideshow").value = "Stop slideshow";
194         slideshow = 1;
195         if (current == images.length - 1) {
196             current = -1;
197         }
198         run_slideshow();
199     } else {
200         document.getElementById("b_slideshow").value = "Run slideshow!";
201         slideshow = 0;
202     }
203 }
204
205 function run_slideshow() {
206     if (slideshow == 0) {
207         return;
208     }
209
210     if (images_loaded[current + 1] == 2) {
211         current++;
212         display_current();
213         setTimeout("run_slideshow()", slideshow_pause * 1000);
214     } else {
215         setTimeout("run_slideshow()", 500);
216     }
217
218     if (current == images.length - 1) {
219         toggle_slideshow();
220     }
221 }
222 </script>
223 EOF
224
225 $body_additions = <<'EOF'
226 onload="init()" id="body"
227 EOF
228
229 $button_first = <<'EOF'
230     <form><input type="button"
231                  onclick="first()"
232                  value="<<- First"
233                  id="b_first"></form>
234 EOF
235
236 $button_previous = <<'EOF'
237     <form><input type="button"
238                  onclick="previous()"
239                  value="<- Previous"
240                  id="b_previous"></form>
241 EOF
242
243 $button_next = <<'EOF'
244     <form><input type="button"
245                  onclick="next()"
246                  value="Next ->"
247                  id="b_next"></form>
248 EOF
249
250 $button_last = <<'EOF'
251     <form><input type="button"
252                  onclick="last()"
253                  value="Last ->>"
254                  id="b_last"></form>
255 EOF
256
257 $button_slideshow = <<'EOF'
258   <form><input type="button"
259                onclick="toggle_slideshow()"
260                value="Run slideshow!"
261                id="b_slideshow">
262   </form>
263 EOF
264
265 $image = <<'EOF'
266   <img name="main_img">
267 EOF
268
269 $caption_additions = <<'EOF'
270   id="main_text"
271 EOF
272
273 $body_code = <<'EOF'
274   <script language="JavaScript1.1" type="text/JavaScript">
275     display_current();
276   </script>
277 EOF
278