From 3adeaa68af3bac73450a4156edb51fd1ec88347a Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 15 Jun 2026 12:47:25 +0300 Subject: Add EXIF mouse-over tooltip to the normal image view The details view already showed a title="" hover summary (camera, aperture, ISO, shutter, date) on its image; the normal image view did not. Wire the same tooltip into view.tmpl: - render_view_page now computes the EXIF tooltip via photo_exif_tooltip_text (reusing the shared identify cache, so no extra ImageMagick work) and passes it as the exif_tooltip context var. - exif_tooltip is now a required render field for the view template too. - view.tmpl adds the title="" attribute to its when the summary is non-empty, mirroring details.tmpl (no title when there is no EXIF). - Tests: extend the EXIF render test to assert the view image carries the same tooltip, and update the required-context-vars expectation for view. Co-Authored-By: Claude Opus 4.8 --- bin/shuriken | 12 ++++++++++-- share/templates/default/view.tmpl | 10 +++++++++- src/lib/album.source.sh | 10 +++++++++- src/lib/template.source.sh | 2 +- tests/cli.sh | 6 +++++- 5 files changed, 34 insertions(+), 6 deletions(-) diff --git a/bin/shuriken b/bin/shuriken index c958ee1..8fafb3b 100755 --- a/bin/shuriken +++ b/bin/shuriken @@ -619,7 +619,7 @@ declare -ra TEMPLATE_RENDER_FIELD_SPECS=( 'render_current_date_text|current_date_html|||' 'render_enter_page_html|context_html|enter_page|enter_page|splash' 'render_exif_details_html|context_raw|exif_details|exif_details|details' - 'render_exif_tooltip_html|context_html|exif_tooltip|exif_tooltip|details' + 'render_exif_tooltip_html|context_html|exif_tooltip|exif_tooltip|details view' 'render_height_html|config_html|HEIGHT||' 'render_html_dir_html|context_html|html_dir|html_dir|*' 'render_maxpreviews_html|config_html|MAXPREVIEWS||' @@ -1605,6 +1605,7 @@ render_view_page() { local -r preview_num="$1"; shift local -r photo_file="$1"; shift local animation_class + local exif_tooltip_text template header "$page_num-$preview_num.html" \ html_dir "$html_dir" \ @@ -1614,6 +1615,12 @@ render_view_page() { show_header_bar 'no' animation_class=$(random_animation_css_class fast "$photo_file") + # Reuse the same EXIF tooltip as the details page so hovering the image in + # the normal view shows the camera/exposure summary (reads the shared + # identify cache, so no extra ImageMagick work). + exif_tooltip_text=$( + photo_exif_tooltip_text "$photo_file" "$INCOMING_DIR/$photo_file" + ) template view "$page_num-$preview_num.html" \ html_dir "$html_dir" \ backhref "$backhref" \ @@ -1621,7 +1628,8 @@ render_view_page() { page_num "$page_num" \ preview_num "$preview_num" \ photo "$photo_file" \ - animation_class "$animation_class" + animation_class "$animation_class" \ + exif_tooltip "$exif_tooltip_text" template footer "$page_num-$preview_num.html" \ html_dir "$html_dir" \ backhref "$backhref" \ diff --git a/share/templates/default/view.tmpl b/share/templates/default/view.tmpl index b62d566..c6a0e7e 100644 --- a/share/templates/default/view.tmpl +++ b/share/templates/default/view.tmpl @@ -1,7 +1,15 @@ +# A non-empty EXIF summary becomes a title="" attribute so hovering the image +# shows the camera/exposure details, mirroring the details view. +if [ -n "$render_exif_tooltip_html" ]; then + render_exif_tooltip_attr=" title=\"$render_exif_tooltip_html\"" +else + render_exif_tooltip_attr='' +fi + cat < - +