From 1dae42dea485d52e52a7f58a335fa70de0515f85 Mon Sep 17 00:00:00 2001
From: Toke Eskildsen <te@ekot.dk>
Date: Thu, 9 Jan 2014 22:24:50 +0100
Subject: [PATCH] Optional histograms on overview page, related to #20 (Display
 histograms on mouse-over on folder view)

---
 quack.sh                 | 12 ++++++++++--
 web/folder_template.html |  3 ++-
 web/quack.css            | 14 +++++++++++---
 web/quack_folder.js      | 18 ++++++++++++++++++
 4 files changed, 41 insertions(+), 6 deletions(-)

diff --git a/quack.sh b/quack.sh
index a015ead..f904c31 100755
--- a/quack.sh
+++ b/quack.sh
@@ -321,6 +321,7 @@ function makeImageParams() {
     SOURCE_IMAGE="${SRC_FOLDER}/${IMAGE}"
     DEST_IMAGE="${DEST_FOLDER}/${BASE}.${IMAGE_DISP_EXT}"
     HIST_IMAGE="${DEST_FOLDER}/${BASE}.histogram.png"
+    HISTOGRAM_LINK=${HIST_IMAGE##*/}
     THUMB_IMAGE="${DEST_FOLDER}/${BASE}.thumb.jpg"
     THUMB_LINK=${THUMB_IMAGE##*/}
     WHITE_IMAGE="${DEST_FOLDER}/${BASE}.white.png"
@@ -373,6 +374,7 @@ function makeImages() {
     local SOURCE_IMAGE="${SRC_FOLDER}/${IMAGE}"
     local DEST_IMAGE="${DEST_FOLDER}/${BASE}.${IMAGE_DISP_EXT}"
     local HIST_IMAGE="${DEST_FOLDER}/${BASE}.histogram.png"
+    local HISTOGRAM_LINK=${HIST_IMAGE##*/}
     local THUMB_IMAGE="${DEST_FOLDER}/${BASE}.thumb.jpg"
     local THUMB_LINK=${THUMB_IMAGE##*/}
     local WHITE_IMAGE="${DEST_FOLDER}/${BASE}.white.png"
@@ -643,7 +645,7 @@ function resolveAlternatives() {
 # Creates only the HTML page itself. The corresponding makeImages must
 # be called before calling this function
 # up parent srcFolder dstFolder image prev_image next_image
-# Output: PAGE_LINK BASE THUMB_LINK THUMB_WIDTH THUMB_HEIGHT
+# Output: PAGE_LINK BASE THUMB_LINK THUMB_WIDTH THUMB_HEIGHT HISTOGRAM_LINK HISTOGRAM_WIDTH HISTOGRAM_HEIGHT
 function makePreviewPage() {
     local UP="$1"
     local PARENT="$2"
@@ -681,6 +683,9 @@ function makePreviewPage() {
     local TIDENTIFY=`identify "$THUMB_IMAGE" | grep -o " [0-9]\+x[0-9]\\+ "`
     THUMB_WIDTH=`echo $TIDENTIFY | grep -o "[0-9]\+x" | grep -o "[0-9]\+"`
     THUMB_HEIGHT=`echo $TIDENTIFY | grep -o "x[0-9]\+" | grep -o "[0-9]\+"`
+    local HIDENTIFY=`identify "$HIST_IMAGE" | grep -o " [0-9]\+x[0-9]\\+ "`
+    HISTOGRAM_WIDTH=`echo $HIDENTIFY | grep -o "[0-9]\+x" | grep -o "[0-9]\+"`
+    HISTOGRAM_HEIGHT=`echo $HIDENTIFY | grep -o "x[0-9]\+" | grep -o "[0-9]\+"`
 
     if [ ".true" == ".$PRESENTATION" ]; then
         local PIDENTIFY=`identify "$PRESENTATION_IMAGE" | grep -o " [0-9]\+x[0-9]\\+ "`
@@ -867,17 +872,20 @@ function makeIndex() {
 
     # Generate pages
     local THUMBS_HTML=""
+    local HISTOGRAMS_HTML=""
     local PREV_IMAGE=""
     if [ "." == ".$IMAGES" ]; then
         IMAGES_HTML="<p>No images</p>"$'\n'
     else
         IMAGES_HTML="<ul>"$'\n'
+        HISTOGRAMS_HTML="<ul>"$'\n'
         for I in $IMAGES; do
             local NEXT_IMAGE=`echo "$IMAGES" | grep -A 1 "$I" | tail -n 1 | grep -v "$I"`
             makePreviewPage "$UP" "$PARENT" "$SRC_FOLDER" "$DEST_FOLDER" "$I" "$PREV_IMAGE" "$NEXT_IMAGE"
             IMAGES_HTML="${IMAGES_HTML}<li><a href=\"$PAGE_LINK\">$BASE</a></li>"$'\n'
 
             THUMBS_HTML="${THUMBS_HTML}<div class=\"thumb\"><a class=\"thumblink\" href=\"$PAGE_LINK\"><span class=\"thumboverlay\"></span><img class=\"thumbimg\" src=\"${THUMB_LINK}\" alt=\"$BASE\" title=\"$BASE\" width=\"$THUMB_WIDTH\" height=\"$THUMB_HEIGHT\"/></a></div>"$'\n'
+            HISTOGRAMS_HTML="${HISTOGRAMS_HTML}<div class=\"histograminfolder\"><a href=\"$PAGE_LINK\"><img src=\"${HISTOGRAM_LINK}\" alt=\"Histogram for $BASE\" title=\"Histogram for $BASE\" width=\"$HISTOGRAM_WIDTH\" height=\"$HISTOGRAM_HEIGHT\"/></a></div>"$'\n'
 #            THUMBS_HTML="${THUMBS_HTML}<a class=\"thumblink\" href=\"$PAGE_LINK\"><img class=\"thumbimg\" src=\"${THUMB_LINK}\" alt=\"$BASE\" title=\"$BASE\" width=\"$THUMB_WIDTH\" height=\"$THUMB_HEIGHT\"/></a>"$'\n'
             PREV_IMAGE=$I
         done
@@ -924,7 +932,7 @@ function makeIndex() {
     fi
     popd > /dev/null
 
-    # UP, PARENT, SRC_FOLDER, DEST_FOLDER, IMAGES_HTML, THUMBS_HTML, SUBFOLDERS_HTML, EDITION_HTML, SNIPPET
+    # UP, PARENT, SRC_FOLDER, DEST_FOLDER, IMAGES_HTML, THUMBS_HTML, HISTOGRAMS_HTML, SUBFOLDERS_HTML, EDITION_HTML, SNIPPET
     ctemplate $FOLDER_TEMPLATE > $PP
     
     # Generate pages for sub folders
diff --git a/web/folder_template.html b/web/folder_template.html
index e15bb9c..2d207ac 100644
--- a/web/folder_template.html
+++ b/web/folder_template.html
@@ -17,8 +17,9 @@
 
 <div class="images">
 <h2>Pages</h2>
-<p><input type="checkbox" id="toggle_blown_thumbs" onClick="toggleBlownThumbs();">Show absolute black and white</input></p>
+<p><input type="checkbox" id="toggle_blown_thumbs" onClick="toggleBlownThumbs();">Show absolute black and white</input><br/><input type="checkbox" id="toggle_histograms" onClick="toggleHistograms();">Histogram view</input></p>
 <div class="thumbs">${THUMBS_HTML}</div>
+<div class="histograms">${HISTOGRAMS_HTML}</div>
 <div class="imagelinks">
 ${IMAGES_HTML}
 </div>
diff --git a/web/quack.css b/web/quack.css
index c38514f..a3b6168 100644
--- a/web/quack.css
+++ b/web/quack.css
@@ -223,10 +223,10 @@ ul.alternatives li + li:before {
 div.imagelinks {
     clear: both;
 }
-div.thumb {
+div.thumb, div.histograms div {
     float: left;
 }
-div.thumbs a {
+div.thumbs a, div.histograms a {
     position: relative;
     display: block;
 }
@@ -237,8 +237,16 @@ div.thumbs a {
     top: 0;
     left: 0;
 }
+.histograms img {
+    border: 1px dotted grey;
+    margin: 0.1em 0.2em 0.1em 0.2em;
+}
+.histograms {
+    display: none;
+}
+
 
-/* Linked articles */
+/* Linked articles on image page */
 
 .g1  { background-color: #FF0000; }
 .g2  { background-color: #00FF00; }
diff --git a/web/quack_folder.js b/web/quack_folder.js
index 33a7f17..0600e41 100644
--- a/web/quack_folder.js
+++ b/web/quack_folder.js
@@ -10,6 +10,24 @@ function toggleBlownThumbs() {
         content[i].style.display = state;
     }
 }
+function toggleHistograms() {    
+    if (document.getElementById('toggle_histograms').checked) {
+        thumb_state = 'none';
+        hist_state = 'block';
+    } else {
+        thumb_state = 'block';
+        hist_state = 'none';
+    }
+    
+    var content = document.getElementsByClassName('thumbs');
+    for (var i = 0 ; i < content.length ; i++) {
+        content[i].style.display = thumb_state;
+    }
+    var content = document.getElementsByClassName('histograms');
+    for (var i = 0 ; i < content.length ; i++) {
+        content[i].style.display = hist_state;
+    }
+}
 
 function setupThumbOverlays() {
     var content = document.getElementsByClassName('thumblink');
-- 
GitLab