From 2b8f7e474a85eba98b2c238dc70ed5ec7c274856 Mon Sep 17 00:00:00 2001 From: Knut Forkalsrud Date: Mon, 16 Sep 2024 17:11:10 -0700 Subject: [PATCH] Integrate search funtion in UI --- pom.xml | 2 +- .../org/forkalsrud/album/exif/Dimension.java | 9 ++- .../exif/DirectoryMetadataGenerator.java | 3 + src/main/webapp/WEB-INF/ng.html | 8 +-- src/main/webapp/assets/render.js | 68 +++++++------------ 5 files changed, 41 insertions(+), 49 deletions(-) diff --git a/pom.xml b/pom.xml index 507a398..58ab217 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ com.drewnoakes metadata-extractor - 2.18.0 + 2.19.0 javax.servlet diff --git a/src/main/java/org/forkalsrud/album/exif/Dimension.java b/src/main/java/org/forkalsrud/album/exif/Dimension.java index 5d14fc2..6127208 100644 --- a/src/main/java/org/forkalsrud/album/exif/Dimension.java +++ b/src/main/java/org/forkalsrud/album/exif/Dimension.java @@ -26,7 +26,14 @@ public class Dimension { } public Dimension(String s) { - String[] coords = s.split("x"); + String[] coords; + if (s.contains("x")) { + coords = s.split("x"); + } else if (s.contains(" ")) { + coords = s.split(" "); + } else { + throw new RuntimeException("Bad dimension: " + s); + } this.w = Integer.parseInt(coords[0]); this.h = Integer.parseInt(coords[1]); } diff --git a/src/main/java/org/forkalsrud/album/exif/DirectoryMetadataGenerator.java b/src/main/java/org/forkalsrud/album/exif/DirectoryMetadataGenerator.java index 6cd2f1a..d8f298b 100644 --- a/src/main/java/org/forkalsrud/album/exif/DirectoryMetadataGenerator.java +++ b/src/main/java/org/forkalsrud/album/exif/DirectoryMetadataGenerator.java @@ -143,6 +143,9 @@ public class DirectoryMetadataGenerator { } catch (ImageProcessingException e) { // not a JPEG file return null; + } catch (RuntimeException e) { + log.error("Unexpected error processing file " + f.getAbsolutePath(), e); + return null; } try { Directory exifDirectory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class); diff --git a/src/main/webapp/WEB-INF/ng.html b/src/main/webapp/WEB-INF/ng.html index 7de07d5..1a53aa9 100644 --- a/src/main/webapp/WEB-INF/ng.html +++ b/src/main/webapp/WEB-INF/ng.html @@ -82,9 +82,6 @@ #fancybox-left, #fancybox-right { bottom: 30px; } - input[type=search]::-webkit-search-cancel-button { - -webkit-appearance: searchfield-cancel-button; - } @@ -98,10 +95,11 @@ --> 
+
diff --git a/src/main/webapp/assets/render.js b/src/main/webapp/assets/render.js index 66a676c..e574dc5 100644 --- a/src/main/webapp/assets/render.js +++ b/src/main/webapp/assets/render.js @@ -17,6 +17,8 @@ $(function() { function renderGrid(data, textStatus) { + var container = $("#container"); + container.empty(); $("#name").text(data.name); document.title = data.name; @@ -62,11 +64,11 @@ $(function() { if (data.groupPrefix && entry.type == "dir") { thisName = entry.earliest; if (prevName != null && prevName != thisName) { - $("
").appendTo("body"); + $("
").appendTo(container); prevName = null; } if (prevName == null) { - $("

").text(thisName).appendTo("body"); + $("

").text(thisName).appendTo(container); prevName = thisName; } } @@ -79,53 +81,17 @@ $(function() { + "\n" + "\n"); - var captionP = $("

\n"); + var captionP = $("

\n"); + captionP.attr("id", entry.name); if (entry.caption) { captionP.text(entry.caption); } captionP.appendTo(gridDiv); - gridDiv.appendTo('body'); + gridDiv.appendTo(container); switch (entry.type) { case "movie": - var size = scale(entry.width, entry.height, movieSize); - var href = "/photo/album" + escape(entry.path) + ".movie?size=" + movieSize; - $("#ent" + idx).attr("rel", "album").attr("href", href).fancybox({ - 'titlePosition' : 'inside', - 'transitionIn' : 'elastic', - 'transitionOut' : 'elastic', - 'easingIn' : 'easeInQuad', - 'easingOut' : 'easeOutQuad', - 'titleFormat' : formatCaption, - 'padding' : 0, - 'href' : "/photo/assets/flowplayer/flowplayer-3.0.3.swf", - 'width' : size.w, - 'height' : size.h, - 'type' : 'swf', - 'swf' : { - 'allowfullscreen' : 'true', - 'wmode' : 'transparent', - 'flashvars': - "config={\ - 'clip': {\ - 'url': '" + href + "'\ - },\ - 'plugins': {\ - 'controls': {\ - 'url': '/photo/assets/flowplayer/flowplayer.controls-3.0.3.swf',\ - 'backgroundColor': 'transparent',\ - 'progressColor': 'transparent',\ - 'bufferColor': 'transparent',\ - 'play':true,\ - 'fullscreen':true,\ - 'autoHide': 'always'\ - }\ - }\ - }" - } - }); - break; case "image": var largeDim = scale(entry.width, entry.height, picSize); $("#ent" + idx).attr("rel", "album").fancybox({ @@ -166,8 +132,26 @@ $(function() { } } - + $("#search").on("submit", function () { + var searchStr = "?q=" + encodeURI($("#searchBox").val()); + history.pushState({ }, null, searchStr); + $.getJSON(location.pathname.replace(/\.album(\?|$)/, '.json') + searchStr, renderGrid); + return false; + }); + + function resetSearch() { + $("#searchBox").val(""); + history.pushState({ }, null, location.pathname); + $.getJSON(location.pathname.replace(/\.album(\?|$)/, '.json'), renderGrid); + return false; + } + $("#search").on("reset", resetSearch); + $("#searchBox").keyup(function (e) { + if (e.key === "Escape") { + resetSearch(); + } + }); $.getJSON(location.pathname.replace(/\.album(\?|$)/, '.json') + location.search, renderGrid);