4 # A.k.a `Best web-album Of the world, Or your money back, Humerus'.
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.
12 # Copyright (c) 2004 Guillaume Cottenceau <gc3 at bluewin.ch>
14 # This software may be freely redistributed under the terms of the GNU
15 # public license version 2.
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.
21 # holds static data to merge in the html "themes"
24 bindtextdomain("booh")
26 require 'booh/booh-lib'
29 $image_head_code = <<'EOF'
30 <meta name="generator" content="Generated by Booh! http://zarb.org/~gc/html/booh.html">
32 <script language="JavaScript1.1" type="text/JavaScript">
34 var images = new Array(~~images~~);
36 var other_sizes = new Array(~~other_sizes~~);
37 var captions = new Array(~~captions~~);
39 var images_ary = new Array();
40 var images_loaded = new Array();
43 var slideshow_pause = 3;
44 var slideshow_timer = null;
46 for (i = 0; i < images.length; i++) {
47 /* this array will contain 0 if image not yet loaded, 1 when loading,
53 document.getElementById('dbg_text').firstChild.data += t + "\n";
56 /* load image, return 1 if image is finished loading */
58 if (images_loaded[i] == 0) {
59 images_ary[i] = new Image();
60 images_ary[i].src = images[i];
63 if (images_loaded[i] == 1) {
64 if (images_ary[i].complete) {
75 /* favor current image, if user clicked on `last' or something */
78 /* don't blindly preload all images at the beginning,
79 * but rather load them one by one, in order to get
80 * next ones faster, beginning with next to current
82 for (i = current + 1; i < images.length && i <= current + 5; i++) {
84 setTimeout("preload()", 500);
88 for (i = current - 1; i >= current - 3; i--) {
91 setTimeout("preload()", 500);
97 setTimeout("preload()", 500);
102 var expires = new Date(new Date().getTime() + (30 * 86400000)); // 30 days
103 document.cookie = 'booh-preferred-size-~~theme~~=~~current_size~~'
104 + '; expires=' + expires.toGMTString()
107 /* retrieve GET parameters */
108 all_params = location.href.split("?")
109 if (all_params.length > 1) {
110 params = all_params[1].split("&");
111 for (i = 0; i < params.length; i++) {
112 keyvalue = params[i].split("=");
113 if (keyvalue[0] == "slideshow_pause") {
114 slideshow_pause = keyvalue[1];
116 if (keyvalue[0] == "run_slideshow") {
119 if (keyvalue[0] == "current") {
120 for (i = 0; i < images.length; i++) {
121 if (images[i] == keyvalue[1]) {
132 if (images.length == 1) {
133 document.getElementById("b_slideshow").disabled = true;
137 function update_sensibilities() {
139 document.getElementById("b_first").disabled = true;
140 document.getElementById("b_previous").disabled = true;
142 document.getElementById("b_first").disabled = false;
143 document.getElementById("b_previous").disabled = false;
146 if (current == images.length - 1) {
147 document.getElementById("b_next").disabled = true;
148 document.getElementById("b_last").disabled = true;
150 document.getElementById("b_next").disabled = false;
151 document.getElementById("b_last").disabled = false;
155 function set_cursor_(value, element) {
157 if (!element || !element.style) {
161 element.style.cursor = value;
163 children = element.childNodes;
164 for (i = 0; i < children.length; i++) {
165 set_cursor_(value, children.item[i]);
169 function set_cursor(value) {
170 set_cursor_(value, document.getElementById('body'));
173 function show_current_text() {
174 /* don't show text if image not yet loaded because navigator
175 * won't refresh it during load */
176 if (images_loaded[current] == 2) {
177 eval("document.getElementById('image_counter')" +
178 ".firstChild.data = '" + ( current + 1 ) + "/" + images.length + "'");
179 eval("document.getElementById('main_text')" +
180 ".firstChild.data = \"" + ( captions[current] || images[current] ) + "\"");
181 for (i = 0; i < other_sizes.length; i++) {
182 eval("linkelems = document.getElementById('link" + other_sizes[i] + "').href.split('?');" +
183 "document.getElementById('link" + other_sizes[i] + "').href = linkelems[0] + '?current=" + eval("images_" + other_sizes[i] + "[current]") + "'");
185 set_cursor("default");
187 setTimeout("show_current_text()", 100);
192 function display_current() {
193 eval("document.main_img.src = images[" + current + "]");
195 update_sensibilities();
199 if (slideshow == 1) {
200 toggle_slideshow(true);
208 if (slideshow == 1) {
209 toggle_slideshow(true);
212 if (current < images.length - 1) {
218 function previous() {
219 if (slideshow == 1) {
220 toggle_slideshow(true);
230 if (slideshow == 1) {
231 toggle_slideshow(true);
234 current = images.length - 1;
238 function toggle_slideshow(now) {
239 if (slideshow == 0) {
240 document.getElementById("b_slideshow").value = "~~stop_slideshow~~";
242 if (current == images.length - 1) {
248 setTimeout("run_slideshow()", slideshow_pause * 1000);
251 clearTimeout(slideshow_timer);
252 document.getElementById("b_slideshow").value = "~~run_slideshow~~";
257 function run_slideshow() {
258 if (slideshow == 0) {
262 if (images_loaded[current + 1] == 2) {
265 slideshow_timer = setTimeout("run_slideshow()", slideshow_pause * 1000);
267 slideshow_timer = setTimeout("run_slideshow()", 500);
270 if (current == images.length - 1) {
271 toggle_slideshow(true);
277 $image_head_code.sub!('~~run_slideshow~~', utf8(_('Run slideshow!')))
278 $image_head_code.sub!('~~stop_slideshow~~', utf8(_('Stop slideshow')))
280 $body_additions = <<'EOF'
281 onload="init()" id="body"
285 <form><input type="button"
287 value="' + utf8(_('<<- First')) + '"
288 id="b_first"></form>';
291 <form><input type="button"
293 value="' + utf8(_('<- Previous')) + '"
294 id="b_previous"></form>';
297 <form><input type="button"
299 value="' + utf8(_('Next ->')) + '"
300 id="b_next"></form>';
303 <form><input type="button"
305 value="' + utf8(_('Last ->>')) + '"
306 id="b_last"></form>';
308 $button_slideshow = '
309 <form><input type="button"
310 onclick="toggle_slideshow(true)"
311 value="' + utf8(_('Run slideshow!')) + '"
316 <img name="main_img">
319 $image_counter_additions = <<'EOF'
323 $caption_additions = <<'EOF'
331 $thumbnails_head_code = <<'EOF'
332 <script language="JavaScript1.1" type="text/JavaScript">
333 var expires = new Date(new Date().getTime() + (30 * 86400000)); // 30 days
334 document.cookie = 'booh-preferred-size-~~theme~~=~~current_size~~'
335 + '; expires=' + expires.toGMTString()
341 $preferred_size_reloader = <<'EOF'
344 <script language="JavaScript1.1" type="text/JavaScript">
346 function getPreferredSize() {
347 if (document.cookie) {
348 var index = document.cookie.indexOf('booh-preferred-size-~~theme~~');
350 var oleft = (document.cookie.indexOf('=', index) + 1);
351 var oright = document.cookie.indexOf(';', index);
353 oright = document.cookie.length;
355 return 'thumbnails-' + document.cookie.substring(oleft, oright) + '.html';
358 return 'thumbnails-~~default_size~~.html';
361 window.location.href = getPreferredSize();