LP1970946 Adjust color contrast in result highlights
authorStephanie Leary <stephanie.leary@equinoxOLI.org>
Mon, 9 Jan 2023 19:46:53 +0000 (13:46 -0600)
committerGalen Charlton <gmc@equinoxOLI.org>
Wed, 19 Apr 2023 14:05:54 +0000 (10:05 -0400)
Lowers the contrast on search result match highlights in the staff
catalog, and changes the highlight tag from <b> (PostgreSQL's default),
to <mark> (new in HTML5).

As an additional consequence, the color contrast for highlighted
search terms in the Bootstrap OPAC (using default styles) improves
from 4.38 to 17.12.

Signed-off-by: Stephanie Leary <stephanie.leary@equinoxOLI.org>
Signed-off-by: Jane Sandberg <js7389@princeton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>

Open-ILS/src/eg2/src/app/share/catalog/bib-display-field.component.css
Open-ILS/src/sql/Pg/300.schema.staged_search.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.mark-tag-for-match-highlights.sql [new file with mode: 0644]

index f4dfc11..bd8aa49 100644 (file)
@@ -1,11 +1,12 @@
 
 .oils_SH {
   font-weight: bolder;
-  background-color: #99ff99;
+  background: #B4F8D3;
+  border-bottom: 1px solid #20C997;
 }
 
 .oils_SH.identifier {
-  font-weight: bolder;
-  background-color: #42b0f4;
+  background: #C4F0F8;
+  border-bottom: 1px solid #3DD5F3;
 }
 
index 9533dcc..523e286 100644 (file)
@@ -999,7 +999,7 @@ BEGIN
         v_css_class := 'oils_SH';
     END IF;
 
-    opts := opts || $$, StopSel=</b>, StartSel="<b class='$$ || v_css_class; -- "
+    opts := opts || $$, StopSel=</mark>, StartSel="<mark class='$$ || v_css_class; -- "
 
     IF v_field_list = '{}'::INT[] THEN
         SELECT ARRAY_AGG(id) INTO v_field_list FROM config.metabib_field WHERE display_field;
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.mark-tag-for-match-highlights.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.mark-tag-for-match-highlights.sql
new file mode 100644 (file)
index 0000000..ddd8e53
--- /dev/null
@@ -0,0 +1,70 @@
+BEGIN;
+
+SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
+
+CREATE OR REPLACE FUNCTION search.highlight_display_fields_impl(
+    rid         BIGINT,
+    tsq         TEXT,
+    field_list  INT[] DEFAULT '{}'::INT[],
+    css_class   TEXT DEFAULT 'oils_SH',
+    hl_all      BOOL DEFAULT TRUE,
+    minwords    INT DEFAULT 5,
+    maxwords    INT DEFAULT 25,
+    shortwords  INT DEFAULT 0,
+    maxfrags    INT DEFAULT 0,
+    delimiter   TEXT DEFAULT ' ... '
+) RETURNS SETOF search.highlight_result AS $f$
+DECLARE
+    opts            TEXT := '';
+    v_css_class     TEXT := css_class;
+    v_delimiter     TEXT := delimiter;
+    v_field_list    INT[] := field_list;
+    hl_query        TEXT;
+BEGIN
+    IF v_delimiter LIKE $$%'%$$ OR v_delimiter LIKE '%"%' THEN --"
+        v_delimiter := ' ... ';
+    END IF;
+
+    IF NOT hl_all THEN
+        opts := opts || 'MinWords=' || minwords;
+        opts := opts || ', MaxWords=' || maxwords;
+        opts := opts || ', ShortWords=' || shortwords;
+        opts := opts || ', MaxFragments=' || maxfrags;
+        opts := opts || ', FragmentDelimiter="' || delimiter || '"';
+    ELSE
+        opts := opts || 'HighlightAll=TRUE';
+    END IF;
+
+    IF v_css_class LIKE $$%'%$$ OR v_css_class LIKE '%"%' THEN -- "
+        v_css_class := 'oils_SH';
+    END IF;
+
+    opts := opts || $$, StopSel=</mark>, StartSel="<mark class='$$ || v_css_class; -- "
+
+    IF v_field_list = '{}'::INT[] THEN
+        SELECT ARRAY_AGG(id) INTO v_field_list FROM config.metabib_field WHERE display_field;
+    END IF;
+
+    hl_query := $$
+        SELECT  de.id,
+                de.source,
+                de.field,
+                evergreen.escape_for_html(de.value) AS value,
+                ts_headline(
+                    ts_config::REGCONFIG,
+                    evergreen.escape_for_html(de.value),
+                    $$ || quote_literal(tsq) || $$,
+                    $1 || ' ' || mf.field_class || ' ' || mf.name || $xx$'>"$xx$ -- "'
+                ) AS highlight
+          FROM  metabib.display_entry de
+                JOIN config.metabib_field mf ON (mf.id = de.field)
+                JOIN search.best_tsconfig t ON (t.id = de.field)
+          WHERE de.source = $2
+                AND field = ANY ($3)
+          ORDER BY de.id;$$;
+
+    RETURN QUERY EXECUTE hl_query USING opts, rid, v_field_list;
+END;
+$f$ LANGUAGE PLPGSQL;
+
+COMMIT;