Merge "Fix deep-recursion problem with whitespace trimming in menu prefixes"
diff --git a/dev/js/spec/menuSpec.js b/dev/js/spec/menuSpec.js
index db3e968..a60d7ab 100644
--- a/dev/js/spec/menuSpec.js
+++ b/dev/js/spec/menuSpec.js
@@ -819,6 +819,24 @@
expect(menu.shownItem(2)).toBe(undefined);
});
+ it('should be filterable (trimming = " p")', function () {
+ var menu = KorAP.HintMenu.create("/p=", listMultiPrefix);
+ // menu._firstActive = true;
+
+ menu.limit(2);
+ expect(menu.show()).toBe(true);
+ menu._prefix.add(" ");
+ expect(menu.show()).toBe(true);
+ menu._prefix.add("p")
+ expect(menu.show()).toBe(true);
+ expect(menu.shownItem(0).name()).toEqual("PP");
+ expect(menu.element().childNodes[3].innerHTML).toEqual(
+ "<strong><mark>P</mark><mark>P</mark></strong>"+
+ "<span><mark>P</mark>ersonal <mark>P</mark>ronoun</span>"
+ );
+ });
+
+
it('should choose prefix with failing prefix (1)', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
menu.limit(2);
diff --git a/dev/js/src/menu.js b/dev/js/src/menu.js
index 490d205..d7ec89f 100644
--- a/dev/js/src/menu.js
+++ b/dev/js/src/menu.js
@@ -4,7 +4,6 @@
* @author Nils Diewald
*/
/*
- * TODO: space is not a valid prefix!
* TODO: Show the slider briefly on move (whenever screen is called).
* TODO: Ignore alt+ and strg+ key strokes.
* TODO: Should scroll to a chosen value after prefixing, if the chosen value is live
diff --git a/dev/js/src/menu/item.js b/dev/js/src/menu/item.js
index 835f69f..812a398 100644
--- a/dev/js/src/menu/item.js
+++ b/dev/js/src/menu/item.js
@@ -179,7 +179,12 @@
// Split prefixes
if (prefixString) {
- var prefixes = prefixString.trim().split(" ");
+
+ // ND:
+ // Doing this in a single line can trigger
+ // a deep-recursion in Firefox 57.01, though I don't know why.
+ prefixString = prefixString.trim();
+ var prefixes = prefixString.split(" ");
var prefix;
var testPos;
@@ -237,43 +242,6 @@
p.removeChild(elem);
};
};
-
- /*
- pos = textlc.indexOf(prefix);
-
- // Matches!
- if (pos >= 0) {
-
- // First element
- if (pos > 0) {
- elem.parentNode.insertBefore(
- document.createTextNode(text.substr(0, pos)),
- elem
- );
- };
-
- // Second element
- var hl = document.createElement("mark");
- hl.appendChild(
- document.createTextNode(text.substr(pos, prefix.length))
- );
- elem.parentNode.insertBefore(hl, elem);
-
- // Third element
- var third = text.substr(pos + prefix.length);
- if (third.length > 0) {
- var thirdE = document.createTextNode(third);
- elem.parentNode.insertBefore(
- thirdE,
- elem
- );
- this._highlight(thirdE, prefix);
- };
-
- var p = elem.parentNode;
- p.removeChild(elem);
- };
- */
}
else {
var children = elem.childNodes;