From 1f5f01e74c4b89c2c85b0f308e21e05a34eae4fb Mon Sep 17 00:00:00 2001 From: Laura_Escamilla Date: Thu, 15 Jan 2026 20:40:07 +0000 Subject: [PATCH] Bug 41639: Improve cover image alt text for WCAG 2.2 compliance Steps to Test 1. Enable at least one cover image provider: * Amazon cover images * Syndetics * Google Jackets * Open Library * Coce * Local cover images * Custom cover images 2. Go to the Staff Intranet search results page and locate a bibliographic record with a visible cover image. 3. Inspect the cover image element in the browser developer tools. 4. Observe that the element (or injected cover element in the case of Google Jackets / Open Library / Coce) uses a generic or non-descriptive alternative text, such as: * alt="Amazon cover image" * alt="Local cover image" * alt="Cover from Syndetics" * or no meaningful accessible name for injected images (Google Jackets, Open Library, Coce) 5. Click into the bibliographic record detail page in the Staff Intranet. 6. Inspect the cover image again and observe the same behavior. 7. Test for all cover image providers. 8. Repeat steps for the OPAC. 9. Apply the patch. 10. Repeat steps 1 - 8. 11. Confirm that the alt text (or accessible name) is now dynamically generated using bibliographic metadata, for example: * alt="Cover of Complete Joe Pass by Joe Pass" 12. Everything is now accessibility verified, WCAG 2.2 SC 1.1.1 compliant, and with no regression across providers. Sign off and have an amazing day! :D --- .../prog/en/modules/catalogue/detail.tt | 13 +++--- .../prog/en/modules/catalogue/results.tt | 25 ++++++++--- .../bootstrap/en/includes/cover-images.inc | 28 +++++++++--- .../bootstrap/en/modules/opac-detail.tt | 45 ++++++++++++++----- 4 files changed, 84 insertions(+), 27 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt index e59c5371cf..0a593190d3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt @@ -237,6 +237,9 @@ [% IF ( CoverImagePlugins || AmazonCoverImages || LocalCoverImages || IntranetCoce || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] + [% SET cover_title = biblio.title || '' %] + [% SET cover_author = biblio.author || '' %] +
[% IF ( LocalCoverImages ) %] @@ -246,7 +249,7 @@ Local cover image @@ -261,7 +264,7 @@ Amazon cover image @@ -273,7 +276,7 @@ [% coce_id = normalized_ean || normalized_isbn %]
[% IF ( coce_id ) %] - + [% ELSE %] No cover image available [% END %] @@ -290,7 +293,7 @@ > @@ -306,7 +309,7 @@ [% IF custom_cover_image_url %]
- Custom cover image + Cover of [% cover_title | html %][% IF cover_author %]by [% cover_author | html %][% END %]
Custom cover image
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt index c04479af86..69adf18cc1 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt @@ -584,6 +584,8 @@ [% FOREACH SEARCH_RESULT IN SEARCH_RESULTS %] + [% SET cover_title = SEARCH_RESULT.title | html %] + [% SET cover_author = SEARCH_RESULT.author | html %] [% IF ( CoverImagePlugins || AmazonCoverImages || LocalCoverImages || IntranetCoce || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] - Local cover image + Cover of [% cover_title %][% IF cover_author %]by [% cover_author %][% END %]
Local cover image
@@ -614,7 +619,10 @@ [% IF ( AmazonCoverImages && SEARCH_RESULT.normalized_isbn ) %]
- Cover image from Amazon.com + Cover of [% cover_title %][% IF cover_author %]by [% cover_author %][% END %]
Amazon cover image
@@ -626,7 +634,7 @@ Cover from Syndetics
Syndetics cover image
@@ -639,7 +647,14 @@ [% IF ( coce_id ) %]
- +
Coce cover image
@@ -651,7 +666,7 @@ [% IF custom_cover_image_url %]
- Custom cover image + Custom cover of [% cover_title %][% IF cover_author %]by [% cover_author %][% END %]
Custom cover image
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/cover-images.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/cover-images.inc index 16f7fe2698..6976617bf7 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/cover-images.inc +++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/cover-images.inc @@ -17,10 +17,12 @@ data-isbn="[% SEARCH_RESULT.normalized_isbn | html %]" data-isbn="[% To.json(SEARCH_RESULT.normalized_isbn) | $raw %]" > + [% SET cover_title = SEARCH_RESULT.title | html %] + [% SET cover_author = SEARCH_RESULT.author | html %] [% IF ( OPACLocalCoverImages && SEARCH_RESULT.has_local_cover_image ) %]
- Local cover image + Cover of [% cover_title %][% IF cover_author %]by [% cover_author %][% END %]
Local cover image
@@ -31,7 +33,7 @@ Amazon cover image @@ -49,7 +51,7 @@ Syndetics cover image
Image from Syndetics
@@ -59,7 +61,13 @@ [% IF ( GoogleJackets ) %]
-
+
Image from Google Jackets
[% END %] @@ -68,7 +76,7 @@ [% coce_id = normalized_ean || SEARCH_RESULT.normalized_isbn %]
[% IF ( coce_id ) %] - + [% END %]
Image from Coce
@@ -76,7 +84,13 @@ [% IF OpenLibraryCovers %]
-
+
Image from OpenLibrary
[% END %] @@ -102,7 +116,7 @@ [% IF custom_cover_image_url %]
- Custom cover image + Cover of [% cover_title %][% IF cover_author %]by [% cover_author %][% END %]
Custom cover image
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt index 63e004d029..3eaeb4dce0 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt @@ -76,6 +76,8 @@
+ [% SET cover_title = biblio.title || '' %] + [% SET cover_author = biblio.author || '' %]
[% IF ( OPACLocalCoverImages ) %] [% IF localimages.count %] @@ -84,7 +86,7 @@ Local cover image @@ -99,7 +101,7 @@ Amazon cover image @@ -116,7 +118,7 @@ > Syndetics cover image
Image from Syndetics
@@ -126,7 +128,14 @@ [% IF ( GoogleJackets ) %]
-
+
Image from Google Jackets
[% END %] @@ -135,7 +144,13 @@ [% coce_id = normalized_ean || normalized_isbn %]
[% IF ( coce_id ) %] - + [% END %]
Image from Coce
@@ -143,7 +158,14 @@ [% IF OpenLibraryCovers %]
-
+
Image from OpenLibrary
[% END %] @@ -153,7 +175,7 @@
[% IF BakerTaylorBookstoreURL %] - See Baker & Taylor + Cover of [% cover_title | html %][% IF cover_author %]by [% cover_author | html %][% END %] [% ELSE %] @@ -169,7 +191,7 @@ [% IF custom_cover_image_url %]
- Custom cover image + Cover of [% cover_title | html %][% IF cover_author %]by [% cover_author | html %][% END %]
Custom cover image
@@ -1010,7 +1032,7 @@

Click on an image to view it in the image viewer

[% FOREACH image IN localimages %] - Local cover image + Cover of [% cover_title | html %][% IF cover_author %]by [% cover_author | html %][% END %] [% END %] [% END # /tab_panel#images %] @@ -1328,7 +1350,10 @@ [% FOR image IN ITEM_RESULT.cover_images %] [% END %] -- 2.39.5