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