--- /dev/null
+#
+# * BOOH *
+#
+# A.k.a `Best web-album Of the world, Or your money back, Humerus'.
+#
+# The acronyn sucks, however this is a tribute to Dragon Ball by
+# Akira Toriyama, where the last enemy beaten by heroes of Dragon
+# Ball is named "Boo". But there was already a free software project
+# called Boo, so this one will be it "Booh". Or whatever.
+#
+#
+# Copyright (c) 2004 Guillaume Cottenceau <gc3 at bluewin.ch>
+#
+# This software may be freely redistributed under the terms of the GNU
+# public license version 2.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+bindtextdomain("booh")
+
+#- we often will want to have one size to nicely fit 800x600 screens,
+#- one for 1024x768 and one for 1280x1024
+#- it's necessary to fit according to the typical space taken by
+#- widgets defined in the skeleton of the theme
+#-
+#- ***IMPORTANT***: CHOOSE 4/3 ASPECT RATIO SIZES (for thumbnails)!
+$images_size = [
+ {
+ 'name' => 'small',
+ 'description' => _("Sizes that should fit browsers in fullscreen for 800x600 screens"),
+ 'fullscreen' => '600x331',
+ 'thumbnails' => '192x144',
+ 'optimizedforwidth' => '800',
+ 'optional' => true,
+ },
+ {
+ 'name' => 'medium',
+ 'description' => _("Sizes that should fit browsers in fullscreen for 1024x768 screens"),
+ 'fullscreen' => '758x422',
+ 'thumbnails' => '240x180',
+ 'optimizedforwidth' => '1024',
+ 'default' => true,
+ },
+ {
+ 'name' => 'large',
+ 'description' => _("Sizes that should fit browsers in fullscreen for 1280x1024 screens"),
+ 'fullscreen' => '960x528',
+ 'thumbnails' => '309x232',
+ 'optimizedforwidth' => '1280',
+ },
+ {
+ 'name' => 'x-large',
+ 'description' => _("Sizes that should fit browsers in fullscreen for 1400x1050 screens"),
+ 'fullscreen' => '1050x576',
+ 'thumbnails' => '328x245',
+ 'optimizedforwidth' => '1400',
+ 'optional' => true,
+ },
+ {
+ 'name' => 'xx-large',
+ 'description' => _("Sizes that should fit browsers in fullscreen for 1600x1200 screens"),
+ 'fullscreen' => '1200x660',
+ 'thumbnails' => '375x281',
+ 'optimizedforwidth' => '1600',
+ 'optional' => true,
+ }
+]
+
+$allowed_N_values = [ 3, 4, 5, 6, 8, 12 ]
+$default_N = 3
+
+$albums_thumbnail_size = '300x225'
--- /dev/null
+var images_ary = new Array();
+var images_loaded = new Array();
+var current = 0;
+var slideshow = 0;
+var slideshow_pause = null;
+var slideshow_timer = null;
+
+for (i = 0; i < images.length; i++) {
+ /* this array will contain 0 if image not yet loaded, 1 when loading,
+ * 2 when complete */
+ images_loaded[i] = 0;
+}
+
+function dbg(t) {
+ document.getElementById('dbg_text').innerHTML += t + "<br/>";
+}
+
+/* load image, return 1 if image is finished loading */
+function load(i) {
+ if (images_loaded[i] == 0) {
+ images_ary[i] = new Image();
+ images_ary[i].src = images[i];
+ images_loaded[i] = 1;
+ }
+ if (images_loaded[i] == 1) {
+ if (images_ary[i].complete) {
+ images_loaded[i] = 2;
+ } else {
+ return 0;
+ }
+ }
+ return 1;
+}
+
+function getparam(key) {
+ all_params = location.href.split("#")
+ if (all_params.length > 1) {
+ params = all_params[1].split("&");
+ for (i = 0; i < params.length; i++) {
+ keyvalue = params[i].split("=");
+ if (keyvalue[0] == key) {
+ return keyvalue[1];
+ }
+ }
+ }
+ return null;
+}
+
+function loadcurrent(img) {
+ for (i = 0; i < images.length; i++) {
+ if (images[i] == img) {
+ current = i;
+ display_current();
+ return;
+ }
+ }
+ current = 0;
+ display_current();
+}
+
+function browser_href() {
+ all = location.href.split("/");
+ return all[all.length - 1];
+}
+
+/* check URL for changes; allows the URL to reflect currently showed image */
+var currentURL = '';
+function checkURL() {
+ if (currentURL == 'ignore1') {
+ // do nothing
+ } else if (currentURL == 'ignore2') {
+ currentURL = browser_href();
+ } else {
+ href = browser_href();
+ if (href != currentURL) {
+ currentURL = href;
+ img = getparam('current');
+ loadcurrent(img);
+ }
+ }
+ setTimeout("checkURL()", 50);
+}
+
+function preload() {
+
+ /* favor current image, if user clicked on `last' or something */
+ load(current);
+
+ /* don't blindly preload all images at the beginning,
+ * but rather load them one by one, in order to get
+ * next ones faster, beginning with next to current
+ */
+ if (current + 1 < images.length && load(current + 1) == 0) {
+ setTimeout("preload()", 50);
+ return;
+ }
+ if (current - 1 >= 0 && load(current - 1) == 0) {
+ setTimeout("preload()", 50);
+ return;
+ }
+
+ for (i = current + 2; i < images.length && i <= current + 5; i++) {
+ if (load(i) == 0) {
+ setTimeout("preload()", 50);
+ return;
+ }
+ }
+ for (i = current - 2; i >= current - 3; i--) {
+ if (i >= 0) {
+ if (load(i) == 0) {
+ setTimeout("preload()", 50);
+ return;
+ }
+ }
+ }
+
+ setTimeout("preload()", 50);
+}
+
+function add_cookie(val) {
+ var expires = new Date(new Date().getTime() + (30 * 86400000)); // 30 days
+ document.cookie = val
+ + '; expires=' + expires.toGMTString()
+ + '; path=/';
+}
+
+function get_cookie(key) {
+ if (document.cookie) {
+ var index = document.cookie.indexOf(key);
+ if (index != -1) {
+ var oleft = (document.cookie.indexOf('=', index) + 1);
+ var oright = document.cookie.indexOf(';', index);
+ if (oright == -1) {
+ oright = document.cookie.length;
+ }
+ return document.cookie.substring(oleft, oright);
+ }
+ }
+ return null;
+}
+
+function init() {
+
+
+ preferred_pause = get_cookie('booh-slideshow-pause-' + dbltilda_theme);
+ if (preferred_pause != null) {
+ document.getElementById('secs').value = preferred_pause;
+ }
+
+ if (getparam('run_slideshow')) {
+ toggle_slideshow();
+ }
+
+ checkURL();
+
+ preload();
+
+ if (images.length == 1) {
+ document.getElementById("b_slideshow").disabled = true;
+ document.getElementById("b_slideshow").setAttribute("class", "disabled");
+ }
+
+ if (navigator.userAgent.indexOf('Opera') == -1) {
+ document.onkeydown = keyDownEvent;
+ }
+}
+
+function change_basename(input, newend) {
+ position = input.lastIndexOf('/');
+ if (position == -1) {
+ return newend;
+ } else {
+ return input.substring(0, position + 1).concat(newend);
+ }
+}
+
+function update_sensibilities() {
+ if (current == 0) {
+ document.getElementById("img_first").src = change_basename(document.getElementById("img_first").src, 'first_dark.gif');
+ document.getElementById("img_previous").src = change_basename(document.getElementById("img_previous").src, 'previous_dark.gif');
+ } else {
+ document.getElementById("img_first").src = change_basename(document.getElementById("img_first").src, 'first_light.gif');
+ document.getElementById("img_previous").src = change_basename(document.getElementById("img_previous").src, 'previous_light.gif');
+ }
+
+ if (current == images.length - 1) {
+ document.getElementById("img_next").src = change_basename(document.getElementById("img_next").src, 'next_dark.gif');
+ document.getElementById("img_last").src = change_basename(document.getElementById("img_last").src, 'last_dark.gif');
+ } else {
+ document.getElementById("img_next").src = change_basename(document.getElementById("img_next").src, 'next_light.gif');
+ document.getElementById("img_last").src = change_basename(document.getElementById("img_last").src, 'last_light.gif');
+ }
+}
+
+function set_cursor_(value, element) {
+
+ if (!element || !element.style) {
+ return;
+ }
+
+ element.style.cursor = value;
+
+ children = element.childNodes;
+ for (i = 0; i < children.length; i++) {
+ set_cursor_(value, children.item[i]);
+ }
+}
+
+function set_cursor(value) {
+ set_cursor_(value, document.getElementById('body'));
+}
+
+function show_current_text() {
+ /* don't show text if image not yet loaded because navigator
+ * won't refresh it during load */
+ if (images_loaded[current] == 2) {
+ document.getElementById('image_counter').innerHTML = ( current + 1 ) + "/" + images.length;
+ document.getElementById('main_text').innerHTML = captions[current];
+ for (i = 0; i < other_sizes.length; i++) {
+ if (other_sizes[i] == "original") {
+ document.getElementById('link' + other_sizes[i]).href = eval("images_" + other_sizes[i] + "[current]");
+ } else {
+ document.getElementById('link' + other_sizes[i]).href = 'image-' + other_sizes[i] + dbltilda_htmlsuffix + '#current=' + eval("images_" + other_sizes[i] + "[current]");
+ }
+ }
+ document.getElementById('thumbnails').href = 'thumbnails-' + dbltilda_current_size + '-' + thumbnailspages[current] + dbltilda_htmlsuffix + '#' + images[current];
+ set_cursor("default");
+ } else {
+ setTimeout("show_current_text()", 50);
+ set_cursor("wait");
+ }
+}
+
+function display_current() {
+ document.main_img.src = images[current];
+ oldhref = browser_href();
+ newhref = 'image-' + dbltilda_current_size + dbltilda_htmlsuffix + '#current=' + images[current];
+ if (oldhref != newhref) {
+ currentURL = 'ignore1';
+ location.href = newhref;
+ currentURL = 'ignore2';
+ }
+ show_current_text();
+ update_sensibilities();
+}
+
+function first() {
+ if (slideshow == 1) {
+ toggle_slideshow(true);
+ }
+
+ current = 0;
+ display_current();
+}
+
+function next() {
+ if (slideshow == 1) {
+ toggle_slideshow(true);
+ }
+
+ if (current < images.length - 1) {
+ current++;
+ display_current();
+ }
+}
+
+function next10() {
+ if (slideshow == 1) {
+ toggle_slideshow(true);
+ }
+
+ if (current < images.length - 11) {
+ current += 10;
+ } else {
+ current = images.length - 1;
+ }
+ display_current();
+}
+
+function previous() {
+ if (slideshow == 1) {
+ toggle_slideshow(true);
+ }
+
+ if (current > 0) {
+ current--;
+ display_current();
+ }
+}
+
+function previous10() {
+ if (slideshow == 1) {
+ toggle_slideshow(true);
+ }
+
+ if (current > 10) {
+ current -= 10;
+ } else {
+ current = 0;
+ }
+ display_current();
+}
+
+function last() {
+ if (slideshow == 1) {
+ toggle_slideshow(true);
+ }
+
+ current = images.length - 1;
+ display_current();
+}
+
+function keyDownEvent(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (key.altKey || key.ctrlKey || key.shiftKey) {
+ return;
+ }
+ switch (key.which) {
+ case 36: // home
+ first();
+ break;
+ case 35: // end
+ last();
+ break;
+ case 37: // left
+ previous();
+ break;
+ case 39: // right
+ next();
+ break;
+ case 38: // up
+ previous10();
+ break;
+ case 40: // down
+ next10();
+ break;
+ }
+}
+
+function toggle_slideshow(now) {
+ if (slideshow == 0) {
+ slideshow_pause = document.getElementById('secs').value;
+ add_cookie('booh-slideshow-pause-' + dbltilda_theme + '=' + slideshow_pause)
+ document.getElementById("b_slideshow").value = dbltilda_stop_slideshow;
+ slideshow = 1;
+ if (current == images.length - 1) {
+ current = -1;
+ }
+ if (now) {
+ run_slideshow();
+ } else {
+ setTimeout("run_slideshow()", slideshow_pause * 1000);
+ }
+ } else {
+ clearTimeout(slideshow_timer);
+ document.getElementById("b_slideshow").value = dbltilda_run_slideshow;
+ slideshow = 0;
+ }
+}
+
+function run_slideshow() {
+ if (slideshow == 0) {
+ return;
+ }
+
+ if (images_loaded[current + 1] == 2) {
+ current++;
+ display_current();
+ slideshow_timer = setTimeout("run_slideshow()", slideshow_pause * 1000);
+ } else {
+ slideshow_timer = setTimeout("run_slideshow()", 50);
+ }
+
+ if (current == images.length - 1) {
+ toggle_slideshow(true);
+ }
+}
+
+function set_preferred_size(val) {
+ var expires = new Date(new Date().getTime() + (30 * 86400000)); // 30 days
+ document.cookie = 'booh-preferred-size-' + dbltilda_theme + '='
+ + val
+ + '; expires=' + expires.toGMTString()
+ + '; path=/';
+}
+