Bug 29578: Upgrade the jQuery highlighter plugin
Under certain conditions, the jQuery term highlighter
can break and in the process make the "Highlight" /
"Unhighlight" button disappear altogether. This affects
catalog searches in both the OPAC and the Staff Client,
with UNIMARC-based instances affected the most as the
"Highlight" / "Unhighlight" button disappears if you
perform a specific OPAC search (see Test plan below).
This patch fixes that by upgrading the highlighter
plugin to its latest version for both the OPAC and
the Staff interface. Then, the changes from commit
2e4b574074
(Bug 5844) are applied to the plugin code.
Also, Koha uses "term" instead of "highlight" as the
class name for the <span> highlighting elements, so
the plugin code is modified for that aspect, too.
Finally, the plugin file is renamed to reflect the
version change (v3 -> v5) and all references to the
old filename in the Template files are updated.
Test plan:
0) In a UNIMARC instance, catalogue two books using
the titles given below (Title subfield = 200$a):
Book 1: Συλλογής των εν επιτομή τοῖς πάλαι γεωγραφηθέντων
Book 2: Επιτομή της ιστορίας των Βαλκανικών Πολέμων (1912-1913)
1) OpacHighlightedWords and StaffHighlightedWords
should both be set to "Highlight".
2) Search the OPAC for "επιτομή των" (without the
quotes). In the results page, notice that:
a) You get an Uncaught DOMException error in the
web browswer's JavaScript Console (press F12):
"Failed to execute 'splitText' on 'Text': The
offset 3 is larger than the Text node's length."
b) the "Highlight" / "Unhighlight" button vanishes
c) some search terms matches are not highlighted
(for example "των" in the 2nd Book)
3) Repeat the same search in the Staff interface.
In the results page, notice that:
a) You get an Uncaught DOMException error in the
web browswer's JavaScript Console (press F12):
"Failed to execute 'splitText' on 'Text': The
offset 3 is larger than the Text node's length."
b) Even though some terms are highlighted, the
button still says "Highlight"
c) some search terms matches are not highlighted
(for example "των" in the 2nd Book)
4) Apply this patch.
5) Repeat the searches (you may have to press CTRL-F5
to reload the JavaScript code). This time the
"Highlight" / "Unhighlight" button is displayed
in the OPAC, and all your search terms should be
highlighted in yellow. Toggling the highlight
should cause no problems, and there shouldn't be
any errors logged in your browser's Console.
Signed-off-by: Christian Nelson <christian.nelson@uwasa.fi>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
parent
e0007bf362
commit
bee56606a6
5 changed files with 11 additions and 9 deletions
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
highlight v3
|
highlight v5
|
||||||
|
|
||||||
Highlights arbitrary terms.
|
Highlights arbitrary terms.
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ jQuery.fn.highlight = function(pat) {
|
||||||
var skip = 0;
|
var skip = 0;
|
||||||
if (node.nodeType == 3) {
|
if (node.nodeType == 3) {
|
||||||
var pos = node.data.toUpperCase().indexOf(pat);
|
var pos = node.data.toUpperCase().indexOf(pat);
|
||||||
|
pos -= (node.data.substr(0, pos).toUpperCase().length - node.data.substr(0, pos).length);
|
||||||
if (pos >= 0) {
|
if (pos >= 0) {
|
||||||
var spannode = document.createElement('span');
|
var spannode = document.createElement('span');
|
||||||
spannode.className = 'term';
|
spannode.className = 'term';
|
||||||
|
@ -37,9 +38,9 @@ jQuery.fn.highlight = function(pat) {
|
||||||
}
|
}
|
||||||
return skip;
|
return skip;
|
||||||
}
|
}
|
||||||
return this.each(function() {
|
return this.length && pat && pat.length ? this.each(function() {
|
||||||
innerHighlight(this, pat.toUpperCase());
|
innerHighlight(this, pat.toUpperCase());
|
||||||
});
|
}) : this;
|
||||||
};
|
};
|
||||||
|
|
||||||
jQuery.fn.removeHighlight = function() {
|
jQuery.fn.removeHighlight = function() {
|
|
@ -21,7 +21,7 @@
|
||||||
[% Asset.js("lib/jquery/jquery-ui-1.13.1.min.js") | $raw %]
|
[% Asset.js("lib/jquery/jquery-ui-1.13.1.min.js") | $raw %]
|
||||||
[% Asset.js("lib/shortcut/shortcut.js") | $raw %]
|
[% Asset.js("lib/shortcut/shortcut.js") | $raw %]
|
||||||
[% Asset.js("lib/js-cookie/js.cookie-2.2.1.min.js") | $raw %]
|
[% Asset.js("lib/js-cookie/js.cookie-2.2.1.min.js") | $raw %]
|
||||||
[% Asset.js("lib/jquery/plugins/jquery.highlight-3.js") | $raw %]
|
[% Asset.js("lib/jquery/plugins/jquery.highlight-5.js") | $raw %]
|
||||||
[% Asset.js("lib/bootstrap/bootstrap.min.js") | $raw %]
|
[% Asset.js("lib/bootstrap/bootstrap.min.js") | $raw %]
|
||||||
[% Asset.js("lib/jquery/plugins/jquery.validate.min.js") | $raw %]
|
[% Asset.js("lib/jquery/plugins/jquery.validate.min.js") | $raw %]
|
||||||
<!-- koha core js -->
|
<!-- koha core js -->
|
||||||
|
|
|
@ -1441,7 +1441,7 @@
|
||||||
|
|
||||||
[% CoverImagePlugins | $raw %]
|
[% CoverImagePlugins | $raw %]
|
||||||
|
|
||||||
[% IF ( OpacHighlightedWords ) %][% Asset.js("lib/jquery/plugins/jquery.highlight-3.js") | $raw %][% END %]
|
[% IF ( OpacHighlightedWords ) %][% Asset.js("lib/jquery/plugins/jquery.highlight-5.js") | $raw %][% END %]
|
||||||
[% IF ( Koha.Preference('OPACDetailQRCode') ) %]
|
[% IF ( Koha.Preference('OPACDetailQRCode') ) %]
|
||||||
[% Asset.js("lib/kjua/kjua.min.js") | $raw %]
|
[% Asset.js("lib/kjua/kjua.min.js") | $raw %]
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
|
@ -584,7 +584,7 @@
|
||||||
[% Asset.js("js/authtoresults.js") | $raw %]
|
[% Asset.js("js/authtoresults.js") | $raw %]
|
||||||
[% Asset.js("lib/hc-sticky.js") | $raw %]
|
[% Asset.js("lib/hc-sticky.js") | $raw %]
|
||||||
[% IF ( OpacHighlightedWords ) %]
|
[% IF ( OpacHighlightedWords ) %]
|
||||||
[% Asset.js("lib/jquery/plugins/jquery.highlight-3.js") | $raw %]
|
[% Asset.js("lib/jquery/plugins/jquery.highlight-5.js") | $raw %]
|
||||||
[% END %]
|
[% END %]
|
||||||
[% IF OpenLibraryCovers || OpenLibrarySearch %]
|
[% IF OpenLibraryCovers || OpenLibrarySearch %]
|
||||||
[% Asset.js("js/openlibrary.js") | $raw %]
|
[% Asset.js("js/openlibrary.js") | $raw %]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
highlight v3
|
highlight v5
|
||||||
|
|
||||||
Highlights arbitrary terms.
|
Highlights arbitrary terms.
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ jQuery.fn.highlight = function(pat) {
|
||||||
var skip = 0;
|
var skip = 0;
|
||||||
if (node.nodeType == 3) {
|
if (node.nodeType == 3) {
|
||||||
var pos = node.data.toUpperCase().indexOf(pat);
|
var pos = node.data.toUpperCase().indexOf(pat);
|
||||||
|
pos -= (node.data.substr(0, pos).toUpperCase().length - node.data.substr(0, pos).length);
|
||||||
if (pos >= 0) {
|
if (pos >= 0) {
|
||||||
var spannode = document.createElement('span');
|
var spannode = document.createElement('span');
|
||||||
spannode.className = 'term';
|
spannode.className = 'term';
|
||||||
|
@ -37,9 +38,9 @@ jQuery.fn.highlight = function(pat) {
|
||||||
}
|
}
|
||||||
return skip;
|
return skip;
|
||||||
}
|
}
|
||||||
return this.each(function() {
|
return this.length && pat && pat.length ? this.each(function() {
|
||||||
innerHighlight(this, pat.toUpperCase());
|
innerHighlight(this, pat.toUpperCase());
|
||||||
});
|
}) : this;
|
||||||
};
|
};
|
||||||
|
|
||||||
jQuery.fn.removeHighlight = function() {
|
jQuery.fn.removeHighlight = function() {
|
Loading…
Reference in a new issue