add gradient theme from benny
authorGuillaume Cottenceau <gcottenc@gmail.com>
Mon, 1 Nov 2010 22:00:57 +0000 (23:00 +0100)
committerGuillaume Cottenceau <gcottenc@gmail.com>
Mon, 1 Nov 2010 22:00:57 +0000 (23:00 +0100)
22 files changed:
bin/booh-backend
data/booh/themes/gradient/metadata/parameters.rb [new file with mode: 0644]
data/booh/themes/gradient/metadata/screenshot-1.png [new file with mode: 0644]
data/booh/themes/gradient/metadata/screenshot-2.png [new file with mode: 0644]
data/booh/themes/gradient/metadata/screenshot-3.png [new file with mode: 0644]
data/booh/themes/gradient/root/booh.css [new file with mode: 0644]
data/booh/themes/gradient/root/booh.js [new file with mode: 0644]
data/booh/themes/gradient/root/booh.png [new file with mode: 0644]
data/booh/themes/gradient/root/bread_blue.png [new file with mode: 0644]
data/booh/themes/gradient/root/bread_selected_blue.png [new file with mode: 0644]
data/booh/themes/gradient/root/go-first-dark.png [new file with mode: 0644]
data/booh/themes/gradient/root/go-first.png [new file with mode: 0644]
data/booh/themes/gradient/root/go-last-dark.png [new file with mode: 0644]
data/booh/themes/gradient/root/go-last.png [new file with mode: 0644]
data/booh/themes/gradient/root/go-next-dark.png [new file with mode: 0644]
data/booh/themes/gradient/root/go-next.png [new file with mode: 0644]
data/booh/themes/gradient/root/go-previous-dark.png [new file with mode: 0644]
data/booh/themes/gradient/root/go-previous.png [new file with mode: 0644]
data/booh/themes/gradient/root/slideshow_32s.png [new file with mode: 0644]
data/booh/themes/gradient/skeleton_image.html [new file with mode: 0644]
data/booh/themes/gradient/skeleton_index.html [new file with mode: 0644]
data/booh/themes/gradient/skeleton_thumbnails.html [new file with mode: 0644]

index 03c6be7..473a8e2 100755 (executable)
@@ -638,16 +638,19 @@ end
 def substitute_navigation(html, xmldir)
     if xmldir.parent.name == 'dir'
         nav = ''
+        navtable = '<table id="navigation"><tr>'
         path = '..'
         parent = xmldir.parent
         while parent.name == 'dir'
             parentcaption = parent.attributes['subdirs-caption'] || File.basename(parent.attributes['path'])
             nav = "<a href=\"#{path}/index#{$htmlsuffix}\">#{parentcaption}</a> #{defer_translation(N_(" > "))} #{nav}"
+            navtable += "<td><a href=\"#{path}/index#{$htmlsuffix}\">#{parentcaption}</a></td>"
             path += '/..'
             parent = parent.parent
         end
         html.gsub!(/~~ifnavigation\?~~(.+?)~~fi~~/) { $1 }
         html.gsub!(/~~navigation~~/, nav + (xmldir.attributes['subdirs-caption'] || File.basename(xmldir.attributes['path'])))
+        html.gsub!(/~~navigationtable~~/, navtable + "<td>" + (xmldir.attributes['subdirs-caption'] || File.basename(xmldir.attributes['path']) + "</td></tr></table>"))
     else
         html.gsub!(/~~ifnavigation\?~~(.+?)~~fi~~/, '')
     end
@@ -1284,6 +1287,11 @@ def walk_source_dir
                     i.gsub!(/~~current_size_js~~/, size2js(sizeobj['name']))
                     i.gsub!(/~~madewith~~/, $madewith || '')
                     i.gsub!(/~~indexlink~~/, $indexlink || '')
+                    if $indexlink.empty?
+                       i.gsub!(/~~ifindexlink\?~~(.+?)~~fi~~/) { }
+                    else
+                       i.gsub!(/~~ifindexlink\?~~(.+?)~~fi~~/) { $1 }
+                    end
                     substitute_addthis(i)
                     substitute_navigation(i, xmldir)
                 end
@@ -1297,6 +1305,8 @@ def walk_source_dir
                              all_pages.collect_with_index { |p,idx| page == p ? idx + 1 : "<a href=\"thumbnails-#{size2js(sizeobj['name'])}%nojs-#{idx}#{$htmlsuffix}\">#{idx + 1}</a>" }.join(', ') +
                              (pagecount < all_pages.size - 1 ? " <a href=\"thumbnails-#{size2js(sizeobj['name'])}%nojs-#{pagecount + 1}#{$htmlsuffix}\">" + defer_translation(N_("Next ->")) + "</a> " : '')
                     for i in final_html
+                        i.sub!(/~~run_slideshow_link~~/, entries.size <= 1 ? '' : 'image-' + size2js(sizeobj['name']) + $htmlsuffix + '#run_slideshow=1')
+                        i.sub!(/~~run_slideshow_text~~/, defer_translation(N_("Run slideshow!")))
                         i.sub!(/~~run_slideshow~~/,
                                entries.size <= 1 ? '' : '<a href="image-' + size2js(sizeobj['name']) + $htmlsuffix + '#run_slideshow=1">' + defer_translation(N_("Run slideshow!"))+'</a>')
                         i.sub!(/~~thumbnails~~/, html_thumbnails)
@@ -1431,6 +1441,11 @@ def walk_source_dir
                     i.gsub!(/~~htmlsuffix~~/, $htmlsuffix)
                     i.gsub!(/~~madewith~~/, $madewith || '')
                     i.gsub!(/~~indexlink~~/, $indexlink || '')
+                    if $indexlink.empty?
+                        i.gsub!(/~~ifindexlink\?~~(.+?)~~fi~~/) { }
+                    else
+                        i.gsub!(/~~ifindexlink\?~~(.+?)~~fi~~/) { $1 }
+                    end
                     substitute_addthis(i)
                     substitute_html_sizes(i, sizeobj, 'image', '')
                     substitute_navigation(i, xmldir)
@@ -1582,6 +1597,11 @@ def walk_source_dir
                 i.gsub!(/~~thumbnails~~/, html_index)
                 i.gsub!(/~~madewith~~/, $madewith || '')
                 i.gsub!(/~~indexlink~~/, $indexlink || '')
+               if $indexlink.empty? 
+                   i.gsub!(/~~ifindexlink\?~~(.+?)~~fi~~/) { }
+                else
+                   i.gsub!(/~~ifindexlink\?~~(.+?)~~fi~~/) { $1 }
+                end
                 substitute_addthis(i)
             end
             
diff --git a/data/booh/themes/gradient/metadata/parameters.rb b/data/booh/themes/gradient/metadata/parameters.rb
new file mode 100644 (file)
index 0000000..ce4a6a9
--- /dev/null
@@ -0,0 +1,80 @@
+#
+#                         *  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'
+
+$hooks = {
+    :image_iteration => proc { |content, type|
+        return content.sub(/width:(\d+)px/) { "width:" + ($1.to_i + 8).to_s + "px" }
+    }
+}
diff --git a/data/booh/themes/gradient/metadata/screenshot-1.png b/data/booh/themes/gradient/metadata/screenshot-1.png
new file mode 100644 (file)
index 0000000..d2eaf50
Binary files /dev/null and b/data/booh/themes/gradient/metadata/screenshot-1.png differ
diff --git a/data/booh/themes/gradient/metadata/screenshot-2.png b/data/booh/themes/gradient/metadata/screenshot-2.png
new file mode 100644 (file)
index 0000000..e000892
Binary files /dev/null and b/data/booh/themes/gradient/metadata/screenshot-2.png differ
diff --git a/data/booh/themes/gradient/metadata/screenshot-3.png b/data/booh/themes/gradient/metadata/screenshot-3.png
new file mode 100644 (file)
index 0000000..aa1ddc9
Binary files /dev/null and b/data/booh/themes/gradient/metadata/screenshot-3.png differ
diff --git a/data/booh/themes/gradient/root/booh.css b/data/booh/themes/gradient/root/booh.css
new file mode 100644 (file)
index 0000000..075eef0
--- /dev/null
@@ -0,0 +1,196 @@
+body {
+    background-color: #597aa3;
+    background-image: -webkit-gradient(linear, left top, left bottom, from(#365378), to(#597aa3), color-stop(0.5, #597aa3));
+    background-repeat: no-repeat;
+    color: #d6d6d6;
+    font-family: "Bitstream Vera Sans", "Lucida Sans", Geneva, Arial, Helvetica, sans-serif;
+    font-size: 16px;
+}
+
+a { text-decoration: none; }
+a:hover { text-decoration: underline; }
+
+a:link {
+    color: #d6d6d6;
+}
+
+a:visited {
+    color: #bacbdc;
+}
+
+
+img {
+    border: 0;
+}
+
+#logo {
+    padding: 10px;
+    position: fixed;
+    bottom: 0;
+    right: 0;
+    font-size: 10px;
+}
+
+#navtop {
+    border-bottom: 1px solid rgba(173,190,211,0.3);
+    margin-bottom: 20px;
+    padding: 4px;
+    height: 30px;
+}
+
+#contenttop {
+    margin-bottom: 40px;
+}
+
+#navlinks {
+       float: right;
+       padding-top: 4px;
+}
+
+#navigation {
+    float:left;
+    border-spacing: 0px;
+    border-collapse: collapse;
+}
+
+#navigation td {
+    height: 26px;
+    background-image: url("bread_blue.png");
+    background-position: 100% 0%;
+    background-repeat: repeat-x;
+    padding-right: 24px;
+    padding-left: 5px;
+   font-size: 15px;
+}
+
+#navigation td:last-child {
+    background-image: url("bread_selected_blue.png");
+    font-weight: bold;
+}
+
+#navigation td:first-child {
+       padding-left: 10px;
+}
+
+#tools {
+    margin: 10px;
+    text-align: center;
+}
+
+#thumbnails {
+       margin-top: 50px;
+}
+
+#thumbnails td {
+       padding: 10px;
+}
+
+
+td {
+        color: #eeeeee;
+}
+
+.thumbnail_image img {
+     -moz-box-shadow:   0px 16px 60px rgba(0,0,0,0.25);
+    -webkit-box-shadow: 0px 16px 60px rgba(0,0,0,0.25);
+            box-shadow: 0px 16px 60px rgba(0,0,0,0.25);
+}
+.thumbnail_image img:hover {
+     -moz-box-shadow:   0px 16px 60px rgba(0,0,0,0.35);
+    -webkit-box-shadow: 0px 16px 60px rgba(0,0,0,0.35);
+            box-shadow: 0px 16px 60px rgba(0,0,0,0.35);
+}
+.image img {
+     -moz-box-shadow:   0px 16px 60px rgba(0,0,0,0.25);
+    -webkit-box-shadow: 0px 16px 60px rgba(0,0,0,0.25);
+            box-shadow: 0px 16px 60px rgba(0,0,0,0.25);
+}
+.image img:hover {
+     -moz-box-shadow:   0px 16px 60px rgba(0,0,0,0.35);
+    -webkit-box-shadow: 0px 16px 60px rgba(0,0,0,0.35);
+            box-shadow: 0px 16px 60px rgba(0,0,0,0.35);
+}
+
+
+.thumbnail_video {
+        background-color: #122;
+}
+.thumbnail_video img {
+        border: 1px solid #a9a9a9;
+        margin: -3px 3px 3px -3px;
+        padding: 3px;
+}
+
+.fullscreen_image img {
+     -moz-box-shadow:   0px 16px 60px rgba(0,0,0,0.25);
+    -webkit-box-shadow: 0px 16px 60px rgba(0,0,0,0.25);
+            box-shadow: 0px 16px 60px rgba(0,0,0,0.25);
+}
+.fullscreen_video {
+        float: left;
+        background-color: #122;
+}
+.fullscreen_video img {
+        background-color: #fff;
+        border: 1px solid #a9a9a9;
+        margin: -10px 10px 10px -10px;
+        padding: 9px;
+}
+
+.disabled {
+        font-style: italic;
+}
+.disabled:hover {
+        background-color: #DEDAD6;
+}
+
+#titletext {
+    font-size: 3.3em;
+    text-shadow: 2px 2px 4px black;
+    color: #adbed3;
+    text-align: center;
+    font-weight: bold;
+}
+
+table.index {
+       width: 100%;
+       padding: 10px;
+       border: 0px solid black;
+}
+
+table.index tr td.image {
+       width: 50%;
+       text-align: right;
+       vertical-align: top;
+}
+
+table.index tr td.caption {
+       width: 50%;
+       text-align: left;
+}
+
+
+.left {
+       text-align: left;
+}
+
+.right {
+       text-align: right;
+}
+
+table.imgnav tr td.sizes {
+       text-align: center;
+}
+
+table.image {
+       width: 100%
+}
+
+table.image tr td {
+       text-align: center;
+}
+
+a.fullscreenvideolink {
+       margin-left:auto;
+       margin-right:auto;
+}
diff --git a/data/booh/themes/gradient/root/booh.js b/data/booh/themes/gradient/root/booh.js
new file mode 100644 (file)
index 0000000..b5574ad
--- /dev/null
@@ -0,0 +1,436 @@
+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() {
+    var img_first = document.getElementById("img_first");
+    var img_previous = document.getElementById("img_previous");
+    if (current == 0) {
+        img_first.src = change_basename(img_first.src, 'go-first-dark.png');
+        img_previous.src = change_basename(img_previous.src, 'go-previous-dark.png');
+        img_first.style['cursor'] = 'default';
+        img_previous.style['cursor'] = 'default';
+    } else {
+        img_first.src = change_basename(img_first.src, 'go-first.png');
+        img_previous.src = change_basename(img_previous.src, 'go-previous.png');
+        img_first.style['cursor'] = 'pointer';  // to work on IE and FF, but warns on FF :/
+        img_first.style['cursor'] = 'hand';
+        img_previous.style['cursor'] = 'pointer';
+        img_previous.style['cursor'] = 'hand';
+    }
+
+    var img_next = document.getElementById("img_next");
+    var img_last = document.getElementById("img_last");
+    if (current == images.length - 1) {
+        img_next.src = change_basename(img_next.src, 'go-next-dark.png');
+        img_last.src = change_basename(img_last.src, 'go-last-dark.png');
+        img_next.style['cursor'] = 'default';
+        img_last.style['cursor'] = 'default';
+    } else {
+        img_next.src = change_basename(img_next.src, 'go-next.png');
+        img_last.src = change_basename(img_last.src, 'go-last.png');
+        img_next.style['cursor'] = 'pointer';
+        img_next.style['cursor'] = 'hand';
+        img_last.style['cursor'] = 'pointer';
+        img_last.style['cursor'] = 'hand';
+    }
+}
+
+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") {
+                var original = eval("elements_" + other_sizes[i] + "[current]");
+                if (original != undefined) {
+                    document.getElementById('link' + other_sizes[i]).href = original;
+                    document.getElementById('link' + other_sizes[i]).style.display = '';
+                } else {
+                    document.getElementById('link' + other_sizes[i]).style.display = 'none';
+                }
+            } else {
+                document.getElementById('link' + other_sizes[i]).href = 'image-' + other_sizes[i] + dbltilda_htmlsuffix + '#current=' + eval("elements_" + 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() {
+    var main_img = document.getElementById('main_img');
+    if (types[current] == 'image') {
+        main_img.innerHTML = '<div class="fullscreen_image"><img src="' + images[current] + '"/></div>';
+    } else {
+        main_img.innerHTML = '<a class="fullscreenvideolink" href="' + videos[current] + '" '
+                           + '   style="display:block;width:' + videos_widths[current] + 'px;height:' + (videos_heights[current] + 24) + 'px" id="player">'
+                           + '  <div class="fullscreen_video"><img src="' + images[current] + '"/></div>'
+                           + '  <img src="' + dbltilda_pathtobase + 'play_video.png" style="position:relative;top:-' + (videos_heights[current] + 48)/2 + 'px;border:0;background-color:transparent"/>'
+                           + '</a>';
+        if (dbltilda_flowplayer_active == 'true') {
+            flowplayer("player", dbltilda_pathtobase + "flowplayer-3.2.2.swf");
+        }
+    }
+    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 toggle_video() {
+    if (types[current] == 'video' && dbltilda_flowplayer_active == 'true') {
+        var player = flowplayer('player');
+        if (player.isLoaded()) {
+            player.toggle();
+        } else {
+            player.play();
+        }
+    }
+}
+
+function keyDownEvent(key) {
+    if (!key) {
+        key = event;
+        key.which = key.keyCode;
+    }
+    if (key.altKey || key.ctrlKey || key.shiftKey) {
+        return;
+    }
+    switch (key.which) {
+      case 32: // space
+        toggle_video();
+        break;
+      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=/';
+}
+
diff --git a/data/booh/themes/gradient/root/booh.png b/data/booh/themes/gradient/root/booh.png
new file mode 100644 (file)
index 0000000..c3a3984
Binary files /dev/null and b/data/booh/themes/gradient/root/booh.png differ
diff --git a/data/booh/themes/gradient/root/bread_blue.png b/data/booh/themes/gradient/root/bread_blue.png
new file mode 100644 (file)
index 0000000..c784694
Binary files /dev/null and b/data/booh/themes/gradient/root/bread_blue.png differ
diff --git a/data/booh/themes/gradient/root/bread_selected_blue.png b/data/booh/themes/gradient/root/bread_selected_blue.png
new file mode 100644 (file)
index 0000000..cbf49a9
Binary files /dev/null and b/data/booh/themes/gradient/root/bread_selected_blue.png differ
diff --git a/data/booh/themes/gradient/root/go-first-dark.png b/data/booh/themes/gradient/root/go-first-dark.png
new file mode 100644 (file)
index 0000000..ac6759c
Binary files /dev/null and b/data/booh/themes/gradient/root/go-first-dark.png differ
diff --git a/data/booh/themes/gradient/root/go-first.png b/data/booh/themes/gradient/root/go-first.png
new file mode 100644 (file)
index 0000000..1a63450
Binary files /dev/null and b/data/booh/themes/gradient/root/go-first.png differ
diff --git a/data/booh/themes/gradient/root/go-last-dark.png b/data/booh/themes/gradient/root/go-last-dark.png
new file mode 100644 (file)
index 0000000..abc46cd
Binary files /dev/null and b/data/booh/themes/gradient/root/go-last-dark.png differ
diff --git a/data/booh/themes/gradient/root/go-last.png b/data/booh/themes/gradient/root/go-last.png
new file mode 100644 (file)
index 0000000..ba74c5a
Binary files /dev/null and b/data/booh/themes/gradient/root/go-last.png differ
diff --git a/data/booh/themes/gradient/root/go-next-dark.png b/data/booh/themes/gradient/root/go-next-dark.png
new file mode 100644 (file)
index 0000000..a0dcc89
Binary files /dev/null and b/data/booh/themes/gradient/root/go-next-dark.png differ
diff --git a/data/booh/themes/gradient/root/go-next.png b/data/booh/themes/gradient/root/go-next.png
new file mode 100644 (file)
index 0000000..2cf7896
Binary files /dev/null and b/data/booh/themes/gradient/root/go-next.png differ
diff --git a/data/booh/themes/gradient/root/go-previous-dark.png b/data/booh/themes/gradient/root/go-previous-dark.png
new file mode 100644 (file)
index 0000000..018749f
Binary files /dev/null and b/data/booh/themes/gradient/root/go-previous-dark.png differ
diff --git a/data/booh/themes/gradient/root/go-previous.png b/data/booh/themes/gradient/root/go-previous.png
new file mode 100644 (file)
index 0000000..73e95e2
Binary files /dev/null and b/data/booh/themes/gradient/root/go-previous.png differ
diff --git a/data/booh/themes/gradient/root/slideshow_32s.png b/data/booh/themes/gradient/root/slideshow_32s.png
new file mode 100644 (file)
index 0000000..82e3a5f
Binary files /dev/null and b/data/booh/themes/gradient/root/slideshow_32s.png differ
diff --git a/data/booh/themes/gradient/skeleton_image.html b/data/booh/themes/gradient/skeleton_image.html
new file mode 100644 (file)
index 0000000..5e5b2fd
--- /dev/null
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+    <title>~~title~~</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <meta name="author" content="'Gradient' theme - Benoit Dien"/>
+    ~~~image_head_code~~~
+    ~~flowplayer_head_code~~
+    <script type="text/javascript" src="~~pathtobase~~booh.js"></script>
+    <link rel="stylesheet" type="text/css" href="~~pathtobase~~booh.css" media="screen" />
+</head>
+
+<body ~~~body_additions~~~>
+
+~~hidden_images_for_remotes~~
+
+<div id="navtop">
+~~navigationtable~~
+<div id="navlinks">
+    ~~indexlink~~ ~~ifindexlink?~~-~~fi~~
+    ~~previous_album~~ ~~ifprevious_album?~~-~~fi~~ ~~thumbnails~~ ~~ifnext_album?~~-~~fi~~ ~~next_album~~
+</div>
+</div>
+
+<table class='imgnav'>
+  <tr>
+    <td width="20%">&nbsp;</td>
+    <td width="1%">
+      <form action="fake">
+        <img src="~~pathtobase~~go-first.png" alt="first" onclick="first()" id="img_first"/>
+      </form>
+    </td>
+    <td width="3%">&nbsp;</td>
+    <td width="1%">
+      <form action="fake">
+        <img src="~~pathtobase~~go-previous.png" alt="previous" onclick="previous()" id="img_previous"/>
+      </form>
+    </td>
+    <td class='sizes'>
+      ~~sizes~~ | ~~
+    </td>
+    <td width="1%">
+      <form action="fake">
+        <img src="~~pathtobase~~go-next.png" alt="next" onclick="next()" id="img_next"/>
+      </form>
+    </td>
+    <td width="3%">&nbsp;</td>
+    <td width="1%">
+      <form action="fake">
+        <img src="~~pathtobase~~go-last.png" alt="last" onclick="last()" id="img_last"/>
+      </form>
+    </td>
+    <td width="20%">&nbsp;</td>
+  </tr>
+</table>
+<table align="center">
+  <tr>
+    <td align="center" colspan="9">
+      <br/>
+        ~~~image~~~
+    </td>
+  </tr>
+</table>
+
+<table align="center">
+<tr>
+    <td align="center" colspan="9">
+        <b><font size="+1" color="#ffff99" ~~~caption_additions~~~>&nbsp;</font></b>
+        <br/>
+        <font size="-2" ~~~image_counter_additions~~~>&nbsp;</font>
+        <hr width="100%"/>
+    </td>
+</tr>
+
+  <tr>
+    <td colspan="9" align="center">
+        ~~~button_slideshow~~~
+        ~~~pause_slideshow~~~
+    </td>
+  </tr>
+</table>
+
+<div id="logo"><a href="http://www.booh.org"><img src="~~pathtobase~~booh.png" alt="Made with Booh"/></a></div>
+
+</body>
+</html>
diff --git a/data/booh/themes/gradient/skeleton_index.html b/data/booh/themes/gradient/skeleton_index.html
new file mode 100644 (file)
index 0000000..96e9e54
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+    <title>~~title~~</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <meta name="author" content="'Gradient' theme - Benoit Dien"/>
+    ~~~index_head_code~~~
+    <link rel="stylesheet" type="text/css" href="~~pathtobase~~booh.css" media="screen" />
+</head>
+
+<body ~~~body_additions~~~>
+
+<!-- Navigation TOP -->
+
+<div id="navtop">
+~~ifnavigation?~~<p>~~navigationtable~~</p>~~fi~~
+<div id="navlinks">
+    ~~indexlink~~
+</div>
+</div>
+
+<!-- Content TOP -->
+
+<div id='contenttop'>
+<div id='titletext'>~~title~~</div>
+</div>
+
+<!-- Content -->
+
+<div id='content'>
+<table class='index'>
+~~iterate1_open~~
+<tr>
+    <td class='image'>
+       ~~image_iteration~~
+    </td>
+    <td class='caption'>
+       <p>~~caption_iteration~~</p>
+    </td>
+</tr>
+<tr><td>&nbsp;</td></tr>
+~~iterate1_close~~
+</table>
+</div>
+
+<div id="logo"><a href="http://www.booh.org"><img src="~~pathtobase~~booh.png" alt="Made with Booh"/></a></div>
+
+</body>
+</html>
diff --git a/data/booh/themes/gradient/skeleton_thumbnails.html b/data/booh/themes/gradient/skeleton_thumbnails.html
new file mode 100644 (file)
index 0000000..240b42f
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+    <title>~~title~~</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <meta name="author" content="'Gradient' theme - Benoit Dien"/>
+    ~~~thumbnails_head_code~~~
+    ~~flowplayer_head_code~~
+    <link rel="stylesheet" type="text/css" href="~~pathtobase~~booh.css" media="screen" />
+</head>
+
+<body>
+
+<!-- Navigation TOP -->
+
+<div id="navtop">
+~~navigationtable~~
+<div id="navlinks">
+    ~~indexlink~~ ~~ifindexlink?~~-~~fi~~
+    ~~previous_album~~ ~~ifprevious_album?~~-~~fi~~
+    ~~return_to_albums~~ ~~ifnext_album?~~-~~fi~~
+    ~~next_album~~
+</div>
+</div>
+
+<!-- Content TOP -->
+
+<div id='contenttop'>
+  <div id='titletext'>~~title~~</div> 
+
+  <div id="tools">
+    <a href="~~run_slideshow_link~~"><img src="~~pathtobase~~slideshow_32s.png" alt="~~run_slideshow_text~~"/></a>
+    &nbsp;
+    ~~sizes~~ | ~~
+  </div> 
+</div>
+
+~~ifmultiplepages?~~<p align="center"><font size="-1">~~multiplepagesstuff~~</font></p>~~fi~~
+
+<!-- Content -->
+
+<div id='content'>
+
+<table width="100%" id="thumbnails">
+~~iterate1_open~~
+<tr>
+    ~~iterate2_open_maxN~~
+    <td align="center" valign="top" ~~colspan~~ ~~homogeinize_width~~>
+      <div>~~image_iteration~~</div>
+       ~~ifimage?~~<br/>~~fi~~ ~~caption_iteration~~
+    </td>
+    ~~iterate2_close~~
+</tr>
+~~iterate1_close~~
+</table>
+</div>
+
+~~ifmultiplepages?~~<p align="center"><font size="+1">~~multiplepagesstuff~~</font></p>~~fi~~
+
+<div id="logo"><a href="http://www.booh.org"><img src="~~pathtobase~~booh.png" alt="Made with Booh"/></a></div>
+
+</body>
+</html>