blob: 12a8fc1140e3690d4aabf0a6969f3666af598efc [file] [log] [blame]
Akronaba7a5a2016-08-15 21:58:33 +02001define(
2 ['menu', 'menu/item', 'menu/prefix', 'menu/lengthField'],
3 function (menuClass, menuItemClass, prefixClass, lengthFieldClass) {
Akron1ff3ac22016-04-28 16:30:45 +02004
Akronaba7a5a2016-08-15 21:58:33 +02005 // The OwnMenu item
6 KorAP.OwnMenuItem = {
7 create : function (params) {
8 return Object.create(menuItemClass).upgradeTo(KorAP.OwnMenuItem)._init(params);
9 },
10 content : function (content) {
11 if (arguments.length === 1) {
12 this._content = content;
13 };
14 return this._content;
15 },
16 _init : function (params) {
17 if (params[0] === undefined)
18 throw new Error("Missing parameters");
Nils Diewald7c8ced22015-04-15 19:21:00 +000019
Akronaba7a5a2016-08-15 21:58:33 +020020 this._content = document.createTextNode(params[0]);
21 this._lcField = ' ' + this.content().textContent.toLowerCase();
Nils Diewald7c8ced22015-04-15 19:21:00 +000022
Akronaba7a5a2016-08-15 21:58:33 +020023 return this;
24 }
25 };
Nils Diewald7c8ced22015-04-15 19:21:00 +000026
Akronaba7a5a2016-08-15 21:58:33 +020027 // The OwnMenu
28 KorAP.OwnMenu = {
29 create : function (list) {
30 return Object.create(menuClass)
31 .upgradeTo(KorAP.OwnMenu)
32 ._init(list, { itemClass : KorAP.OwnMenuItem });
33 }
34 };
Nils Diewaldfda29d92015-01-22 17:28:01 +000035
Nils Diewaldfda29d92015-01-22 17:28:01 +000036
Akronaba7a5a2016-08-15 21:58:33 +020037 // HintMenuItem
38 KorAP.HintMenuItem = {
39 create : function (params) {
40 return Object.create(menuItemClass)
41 .upgradeTo(KorAP.HintMenuItem)
42 ._init(params);
43 },
44 content : function (content) {
45 if (arguments.length === 1) {
46 this._content = content;
47 };
48 return this._content;
49 },
50 _init : function (params) {
51 if (params[0] === undefined || params[1] === undefined)
52 throw new Error("Missing parameters");
Nils Diewald7c8ced22015-04-15 19:21:00 +000053
Akronaba7a5a2016-08-15 21:58:33 +020054 this._name = params[0];
55 this._action = params[1];
56 this._lcField = ' ' + this._name.toLowerCase();
Nils Diewald7c8ced22015-04-15 19:21:00 +000057
Akronaba7a5a2016-08-15 21:58:33 +020058 if (params.length > 2) {
59 this._desc = params[2];
60 this._lcField += " " + this._desc.toLowerCase();
61 };
62
63 return this;
64 },
Nils Diewald7c8ced22015-04-15 19:21:00 +000065
Akronaba7a5a2016-08-15 21:58:33 +020066 name : function () {
67 return this._name;
68 },
69 action : function () {
70 return this._action;
71 },
72 desc : function () {
73 return this._desc;
74 },
75 element : function () {
76 // already defined
Akron24aa0052020-11-10 11:00:34 +010077 if (this._el !== undefined)
78 return this._el;
Nils Diewald7c8ced22015-04-15 19:21:00 +000079
Akronaba7a5a2016-08-15 21:58:33 +020080 // Create list item
81 var li = document.createElement("li");
82 li.setAttribute("data-action", this._action);
Nils Diewald7c8ced22015-04-15 19:21:00 +000083
Akronaba7a5a2016-08-15 21:58:33 +020084 // Create title
85 var name = document.createElement("strong");
86 name.appendChild(document.createTextNode(this._name));
87
88 li.appendChild(name);
Nils Diewald7c8ced22015-04-15 19:21:00 +000089
Akronaba7a5a2016-08-15 21:58:33 +020090 // Create description
91 if (this._desc !== undefined) {
92 var desc = document.createElement("span");
93 desc.appendChild(document.createTextNode(this._desc));
94 li.appendChild(desc);
95 };
Akron24aa0052020-11-10 11:00:34 +010096 return this._el = li;
Akronaba7a5a2016-08-15 21:58:33 +020097 }
98 };
99
100
101 // HintMenu
102 KorAP.HintMenu = {
103 create : function (context, list) {
104 var obj = Object.create(menuClass)
105 .upgradeTo(KorAP.HintMenu)
106 ._init(list, {itemClass : KorAP.HintMenuItem});
107 obj._context = context;
108 return obj;
109 }
110 };
111
112
113 // The ComplexMenuItem
114 KorAP.ComplexMenuItem = {
115 create : function (params) {
116 return Object.create(menuItemClass)
117 .upgradeTo(KorAP.ComplexMenuItem)
118 ._init(params);
119 },
120 content : function (content) {
121 if (arguments.length === 1) {
122 this._content = content;
123 };
124 return this._content;
125 },
126 _init : function (params) {
127 if (params[0] === undefined)
128 throw new Error("Missing parameters");
129
130 var r = document.createElement('div');
131 for (var i = 1; i <= params.length; i++) {
132 var h = document.createElement('h' + i);
133 h.appendChild(document.createTextNode(params[i-1]));
134 r.appendChild(h);
135 };
136
137 this._content = r;
138 this._lcField = ' ' + this.content().textContent.toLowerCase();
139
140 return this;
141 }
142 };
143
144
145 describe('KorAP.MenuItem', function () {
146 it('should be initializable', function () {
147 expect(
148 function() { menuItemClass.create([]) }
149 ).toThrow(new Error("Missing parameters"));
150
151 expect(
152 function() { KorAP.OwnMenuItem.create([]) }
153 ).toThrow(new Error("Missing parameters"));
154
155 var mi = KorAP.OwnMenuItem.create(["Baum"]);
156 expect(mi.element().firstChild.nodeValue).toEqual('Baum');
157 expect(mi.lcField()).toEqual(' baum');
158 });
159
160 it('shouldn\'t have a reference to the menu', function () {
161 var menuItem = KorAP.OwnMenuItem.create(['Test']);
162 expect(menuItem.menu()).toBe(undefined);
163 });
164
165 it('should be activatable and deactivateable by class', function () {
166 var menuItem = KorAP.OwnMenuItem.create(['Test']);
167
168 expect(menuItem.active()).toBe(false);
169 expect(menuItem.element().getAttribute("class")).toBe(null);
170 menuItem.active(true);
171 expect(menuItem.active()).toBe(true);
172 expect(menuItem.element().getAttribute("class")).toEqual("active");
173 menuItem.active(false); // Is active
174 expect(menuItem.active()).toBe(false);
175 expect(menuItem.element().getAttribute("class")).toEqual("");
176 menuItem.active(true);
177 expect(menuItem.active()).toBe(true);
178 expect(menuItem.element().getAttribute("class")).toEqual("active");
179
180 menuItem = KorAP.OwnMenuItem.create(['Spiegel']);
181 expect(menuItem.active()).toBe(false);
182 expect(menuItem.element().getAttribute("class")).toBe(null);
183 menuItem.active(false); // Is not active
184 expect(menuItem.active()).toBe(false);
185 expect(menuItem.element().getAttribute("class")).toBe(null);
186 });
187
188 it('should be set to boundary', function () {
189 var menuItem = KorAP.OwnMenuItem.create(['CoreNLP']);
190 expect(menuItem.active()).toBe(false);
191 expect(menuItem.element().getAttribute("class")).toBe(null);
192
193 // Set active
194 menuItem.active(true);
195 expect(menuItem.active()).toBe(true);
196 expect(menuItem.noMore()).toBe(false);
197 expect(menuItem.element().getAttribute("class")).toEqual("active");
198
199 // Set no more
200 menuItem.noMore(true);
201 expect(menuItem.active()).toBe(true);
202 expect(menuItem.noMore()).toBe(true);
203 expect(menuItem.element().getAttribute("class")).toEqual("active no-more");
204
205 // No no more
206 menuItem.noMore(false);
207 expect(menuItem.active()).toBe(true);
208 expect(menuItem.noMore()).toBe(false);
209 expect(menuItem.element().getAttribute("class")).toEqual("active");
210
211 // Set no more, deactivate
212 menuItem.noMore(true);
213 menuItem.active(false);
214 expect(menuItem.active()).toBe(false);
215 expect(menuItem.noMore()).toBe(true);
216 expect(menuItem.element().getAttribute("class")).toEqual("no-more");
217
218 // Set active
219 menuItem.active(true);
220 expect(menuItem.active()).toBe(true);
221 expect(menuItem.noMore()).toBe(true);
222 expect(menuItem.element().getAttribute("class")).toEqual("no-more active");
223 });
224
225
226 it('should be highlightable', function () {
227 // Highlight in the middle
228 var menuItem = KorAP.OwnMenuItem.create(['CoreNLP']);
229 menuItem.highlight("ren");
230 expect(menuItem.element().innerHTML).toEqual("Co<mark>reN</mark>LP");
231
232 menuItem.lowlight();
233 expect(menuItem.element().innerHTML).toEqual("CoreNLP");
234
235 var plain = "<div><h1>CoreNLP</h1><h2>corenlp/</h2></div>";
236
237 // Starting highlight
238 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
239 menuItem.highlight("cor");
240 expect(menuItem.element().innerHTML).toEqual("<div><h1><mark>Cor</mark>eNLP</h1><h2><mark>cor</mark>enlp/</h2></div>");
241
242 menuItem.lowlight();
243 expect(menuItem.element().innerHTML).toEqual(plain);
244
245 // Starting highlight - short
246 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
247 menuItem.highlight("c");
248 expect(menuItem.element().innerHTML).toEqual("<div><h1><mark>C</mark>oreNLP</h1><h2><mark>c</mark>orenlp/</h2></div>");
249
250 menuItem.lowlight();
251 expect(menuItem.element().innerHTML).toEqual(plain);
252
253 // Highlight at the end
254 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
255 menuItem.highlight("nlp");
256 expect(menuItem.element().innerHTML).toEqual("<div><h1>Core<mark>NLP</mark></h1><h2>core<mark>nlp</mark>/</h2></div>");
257
258 menuItem.lowlight();
259 expect(menuItem.element().innerHTML).toEqual(plain);
260
261 // Highlight at the end - short
262 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
263 menuItem.highlight("p");
264 expect(menuItem.element().innerHTML).toEqual("<div><h1>CoreNL<mark>P</mark></h1><h2>corenl<mark>p</mark>/</h2></div>");
265
266 menuItem.lowlight();
267 expect(menuItem.element().innerHTML).toEqual(plain);
268
269 // No highlight
270 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
271 menuItem.highlight("xp");
272 expect(menuItem.element().innerHTML).toEqual(plain);
273
274 menuItem.lowlight();
275 expect(menuItem.element().innerHTML).toEqual(plain);
276
277 // Highlight in the middle - first
278 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
279 menuItem.highlight("ren");
280 expect(menuItem.element().innerHTML).toEqual("<div><h1>Co<mark>reN</mark>LP</h1><h2>co<mark>ren</mark>lp/</h2><h3>This is my Example</h3></div>");
281
282 plain = "<div><h1>CoreNLP</h1><h2>corenlp/</h2><h3>This is my Example</h3></div>"
283
284 menuItem.lowlight();
285 expect(menuItem.element().innerHTML).toEqual(plain);
286
287 // Highlight in the middle - second
288 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
289 menuItem.highlight("ampl");
290 expect(menuItem.element().innerHTML).toEqual("<div><h1>CoreNLP</h1><h2>corenlp/</h2><h3>This is my Ex<mark>ampl</mark>e</h3></div>");
291
292 menuItem.lowlight();
293 expect(menuItem.element().innerHTML).toEqual(plain);
294
295 // Highlight in the middle - both
296 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
297 menuItem.highlight("e");
Akronacffc652017-12-18 21:21:25 +0100298
Akronaba7a5a2016-08-15 21:58:33 +0200299 expect(menuItem.element().innerHTML).toEqual("<div><h1>Cor<mark>e</mark>NLP</h1><h2>cor<mark>e</mark>nlp/</h2><h3>This is my <mark>E</mark>xampl<mark>e</mark></h3></div>");
300
301 menuItem.lowlight();
302 expect(menuItem.element().innerHTML).toEqual(plain);
303
304 // Highlight in the end - second
305 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
306 menuItem.highlight("le");
307 expect(menuItem.element().innerHTML).toEqual("<div><h1>CoreNLP</h1><h2>corenlp/</h2><h3>This is my Examp<mark>le</mark></h3></div>");
308
309 menuItem.lowlight();
310 expect(menuItem.element().innerHTML).toEqual(plain);
311
312 // Highlight at the beginning - second
313 menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
314 menuItem.highlight("this");
315 expect(menuItem.element().innerHTML).toEqual("<div><h1>CoreNLP</h1><h2>corenlp/</h2><h3><mark>This</mark> is my Example</h3></div>");
316
317 menuItem.lowlight();
318 expect(menuItem.element().innerHTML).toEqual(plain);
319 });
320 });
321
322
323 describe('KorAP.Menu', function () {
324 var list = [
325 ["Constituency", "c=", "Example 1"],
326 ["Lemma", "l="],
327 ["Morphology", "m=", "Example 2"],
328 ["Part-of-Speech", "p="],
329 ["Syntax", "syn="]
330 ];
331
Akronacffc652017-12-18 21:21:25 +0100332 var listMultiPrefix = [
333 ["PP","PP ","Personal Pronoun"],
334 ["PPP","PPP ","Personal Pronoun, Plural"],
335 ["PPPA","PPPA ","Personal Pronoun, Plural, Acc."],
336 ["PPPD","PPPD ","Personal Pronoun, Plural, Dative"],
337 ["PPPR","PPPR ","Personal Pronoun, Plural, Direct"],
338 ["PPPO","PPPO ","Personal Pronoun, Plural, Oblique"],
339 ["PPS","PPS ","Personal Pronoun, Singular"],
340 ["PPSA","PPSA ","Personal Pronoun, Singular, Accusative"],
341 ["PPSD","PPSD ","Personal Pronoun, Singular, Dative"],
342 ["PPSR","PPSR ","Personal Pronoun, Singular, Direct"],
343 ["PPSN","PPSN ","Personal Pronoun, Singular, Nominative"],
344 ["PPSO","PPSO ","Personal Pronoun, Singular, Oblique"]
345 ];
346
Akronaba7a5a2016-08-15 21:58:33 +0200347 var demolist = [
348 ['Titel', 'title'],
349 ['Untertitel', 'subTitle'],
350 ['Veröffentlichungsdatum', 'pubDate'],
351 ['Länge', 'length'],
352 ['Autor', 'author']
353 ];
354
355 var demolonglist = [
356 ['Titel', 'title'],
357 ['Untertitel', 'subTitle'],
358 ['Veröffentlichungsdatum', 'pubDate'],
359 ['Länge', 'length'],
360 ['Autor', 'author'],
361 ['Genre', 'genre'],
362 ['corpusID', 'corpusID'],
363 ['docID', 'docID'],
364 ['textID', 'textID'],
365 ];
366
367 it('should be initializable', function () {
368 var list = [
369 ["Constituency"],
370 ["Lemma"],
371 ["Morphology"],
372 ["Part-of-Speech"],
373 ["Syntax"]
374 ];
375
376 var menu = KorAP.OwnMenu.create(list);
hebastaa7806882019-11-18 19:35:47 +0100377 expect(menu.dontHide).toBe(false);
Akronaba7a5a2016-08-15 21:58:33 +0200378 menu._firstActive = true;
379 expect(menu.itemClass()).toEqual(KorAP.OwnMenuItem);
380 expect(menu.element().nodeName).toEqual('UL');
381 expect(menu.element().classList.contains('visible')).toBeFalsy();
382 expect(menu.limit()).toEqual(8);
383
384 menu.limit(9);
385 expect(menu.limit()).toEqual(9);
386
387 menu.limit(8);
388
389 // view
390 menu.show();
391
392 // First element in list
393 expect(menu.item(0).active()).toBe(true);
394 expect(menu.item(0).noMore()).toBe(true);
395
396 // Middle element in list
397 expect(menu.item(2).active()).toBe(false);
398 expect(menu.item(2).noMore()).toBe(false);
399
400 // Last element in list
401 expect(menu.item(menu.length() - 1).active()).toBe(false);
402 expect(menu.item(menu.length() - 1).noMore()).toBe(true);
403 });
404
405 it('should have a reference to the menu', function () {
406 var menu = KorAP.HintMenu.create("cnx/", list);
407 expect(menu.item(0).menu()).toEqual(menu);
408
409 menu = KorAP.HintMenu.create("cnx/", list);
410 expect(menu.element().menu).toEqual(menu);
411 });
412
413
414 it('should be visible', function () {
415 var menu = KorAP.HintMenu.create("cnx/", list);
416 expect(menu.removeItems()).toBe(undefined);
417 menu.limit(3);
418
419 expect(menu.show()).toBe(true);
420
421 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
422 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
423 expect(menu.element().childNodes[4].getAttribute("data-action")).toEqual("l=");
424 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
425 expect(menu.element().childNodes[6]).toBe(undefined);
426
427 // Check boundaries
428 expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(true);
429 expect(menu.element().childNodes[4].classList.contains("no-more")).toBe(false);
430 expect(menu.element().childNodes[5].classList.contains("no-more")).toBe(false);
431 });
432
433 it('should be filterable', function () {
434 var menu = KorAP.HintMenu.create("cnx/", list);
435 menu.limit(3);
436 expect(menu.prefix("o").show()).toBe(true);
437 expect(menu.element().childNodes[0].innerHTML).toEqual("o");
438 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
439 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
440 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
441 expect(menu.element().childNodes[6]).toBe(undefined);
442
443 // Check boundaries
444 expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(true);
445 expect(menu.element().childNodes[4].classList.contains("no-more")).toBe(false);
446 expect(menu.element().childNodes[5].classList.contains("no-more")).toBe(true);
447
448 menu.limit(2);
449
450 expect(menu.prefix("o").show()).toBe(true);
451 expect(menu.element().childNodes[0].innerHTML).toEqual("o");
452 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
453 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
454 expect(menu.element().childNodes[5]).toBe(undefined);
455
456 // Check boundaries
457 expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(true);
458 expect(menu.element().childNodes[4].classList.contains("no-more")).toBe(false);
459 expect(menu.element().childNodes[5]).toBe(undefined);
460
461 expect(menu.prefix("e").show()).toBe(true);
462 expect(menu.element().childNodes[0].innerHTML).toEqual("e");
463 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
464 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
465 expect(menu.element().childNodes[5]).toBe(undefined);
466
467 menu.limit(5);
468 expect(menu.prefix("a").show()).toBe(true);
469 expect(menu.element().childNodes[0].innerHTML).toEqual("a");
470 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Ex<mark>a</mark>mple 1</span>");
471 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemm<mark>a</mark></strong>");
472 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Ex<mark>a</mark>mple 2</span>");
473 expect(menu.element().childNodes[6].innerHTML).toEqual("<strong>P<mark>a</mark>rt-of-Speech</strong>");
474 expect(menu.element().childNodes[7].innerHTML).toEqual("<strong>Synt<mark>a</mark>x</strong>");
475 expect(menu.element().childNodes[8]).toBe(undefined);
476 });
477
478
479 it('should be nextable', function () {
480 var menu = KorAP.HintMenu.create("cnx/", list);
481 menu._firstActive = true;
482
483 // Show only 3 items
484 menu.limit(3);
485 expect(menu.show()).toBe(true);
486 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
487 expect(menu.shownItem(0).active()).toBe(true);
488 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
489 expect(menu.shownItem(1).active()).toBe(false);
490 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
491 expect(menu.shownItem(2).active()).toBe(false);
492 expect(menu.element().childNodes[6]).toBe(undefined);
493
494 // Activate next (1)
495 menu.next();
496 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
497 expect(menu.shownItem(0).active()).toBe(false);
498 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
499 expect(menu.shownItem(1).active()).toBe(true);
500 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
501 expect(menu.shownItem(2).active()).toBe(false);
502 expect(menu.element().childNodes[6]).toBe(undefined);
503
504 // Activate next (2)
505 menu.next();
506 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
507 expect(menu.shownItem(0).active()).toBe(false);
508 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
509 expect(menu.shownItem(1).active()).toBe(false);
510 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
511 expect(menu.shownItem(2).active()).toBe(true);
512 expect(menu.element().childNodes[6]).toBe(undefined);
513
514 // Activate next (3)
515 // scroll!
516 menu.next();
517 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemma</strong>");
518 expect(menu.shownItem(0).active()).toBe(false);
519 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
520 expect(menu.shownItem(1).active()).toBe(false);
521 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
522 expect(menu.shownItem(2).active()).toBe(true);
523 expect(menu.element().childNodes[6]).toBe(undefined);
524
525 // Activate next (4)
526 menu.next();
527 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
528 expect(menu.shownItem(0).active()).toBe(false);
529 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
530 expect(menu.shownItem(1).active()).toBe(false);
531 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Syntax</strong>");
532 expect(menu.shownItem(2).active()).toBe(true);
533 expect(menu.element().childNodes[6]).toBe(undefined);
534
535 // Activate next (5) - ROLL
536 menu.next();
537 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
538 expect(menu.shownItem(0).active()).toBe(true);
539 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
540 expect(menu.shownItem(1).active()).toBe(false);
541 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
542 expect(menu.shownItem(2).active()).toBe(false);
543 expect(menu.element().childNodes[6]).toBe(undefined);
544
545 // Active next (6)
546 menu.next();
547 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
548 expect(menu.shownItem(0).active()).toBe(false);
549 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
550 expect(menu.shownItem(1).active()).toBe(true);
551 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
552 expect(menu.shownItem(2).active()).toBe(false);
553 expect(menu.element().childNodes[6]).toBe(undefined);
554 });
555
556 it('should be nextable without active field', function () {
557 var menu = KorAP.HintMenu.create("cnx/", list);
558 menu.limit(3);
559 expect(menu.show()).toBe(true);
560 menu.next();
561 expect(menu.shownItem(0).active()).toEqual(true);
562 });
563
564
565 it('should be prevable', function () {
566 var menu = KorAP.HintMenu.create("cnx/", list);
567 menu._firstActive = true;
568 menu.limit(3);
569 expect(menu.show()).toBe(true);
570
571 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
572 expect(menu.shownItem(0).active()).toBe(true);
573 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
574 expect(menu.shownItem(1).active()).toBe(false);
575 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
576 expect(menu.shownItem(2).active()).toBe(false);
577 expect(menu.element().childNodes[6]).toBe(undefined);
578
579 // Activate prev (1) - roll to bottom
580 menu.prev();
581 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
582 expect(menu.shownItem(0).active()).toBe(false);
583 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
584 expect(menu.shownItem(1).active()).toBe(false);
585 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Syntax</strong>");
586 expect(menu.shownItem(2).active()).toBe(true);
587 expect(menu.element().childNodes[6]).toBe(undefined);
588
589 // Activate prev (2)
590 menu.prev();
591 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
592 expect(menu.shownItem(0).active()).toBe(false);
593 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
594 expect(menu.shownItem(1).active()).toBe(true);
595 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Syntax</strong>");
596 expect(menu.shownItem(2).active()).toBe(false);
597 expect(menu.element().childNodes[6]).toBe(undefined);
598
599 // Activate prev (3)
600 menu.prev();
601 expect(menu.shownItem(0).name()).toEqual("Morphology");
602 expect(menu.shownItem(0).active()).toBe(true);
603 expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
604 expect(menu.shownItem(1).active()).toBe(false);
605 expect(menu.shownItem(2).name()).toEqual("Syntax");
606 expect(menu.shownItem(2).active()).toBe(false);
607 expect(menu.element().childNodes[6]).toBe(undefined);
608
609 // Activate prev (4)
610 menu.prev();
611 expect(menu.shownItem(0).name()).toEqual("Lemma");
612 expect(menu.shownItem(0).active()).toBe(true);
613 expect(menu.shownItem(1).name()).toEqual("Morphology");
614 expect(menu.shownItem(1).active()).toBe(false);
615 expect(menu.shownItem(2).name()).toEqual("Part-of-Speech");
616 expect(menu.shownItem(2).active()).toBe(false);
617 expect(menu.element().childNodes[6]).toBe(undefined);
618
619 // Activate prev (5)
620 menu.prev();
621 expect(menu.shownItem(0).name()).toEqual("Constituency");
622 expect(menu.shownItem(0).active()).toBe(true);
623 expect(menu.shownItem(1).name()).toEqual("Lemma");
624 expect(menu.shownItem(1).active()).toBe(false);
625 expect(menu.shownItem(2).name()).toEqual("Morphology");
626 expect(menu.shownItem(2).active()).toBe(false);
627 expect(menu.element().childNodes[6]).toBe(undefined);
628
629 // Activate next (1)
630 menu.next();
631 expect(menu.shownItem(0).name()).toEqual("Constituency");
632 expect(menu.shownItem(0).active()).toBe(false);
633 expect(menu.shownItem(1).name()).toEqual("Lemma");
634 expect(menu.shownItem(1).active()).toBe(true);
635 expect(menu.shownItem(2).name()).toEqual("Morphology");
636 expect(menu.shownItem(2).active()).toBe(false);
637 expect(menu.element().childNodes[6]).toBe(undefined);
638
639 // Activate prev (6)
640 menu.prev();
641
642 // Activate prev (7)
643 menu.prev();
644 expect(menu.shownItem(0).name()).toEqual("Morphology");
645 expect(menu.shownItem(0).active()).toBe(false);
646 expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
647 expect(menu.shownItem(1).active()).toBe(false);
648 expect(menu.shownItem(2).name()).toEqual("Syntax");
649 expect(menu.shownItem(2).active()).toBe(true);
650 expect(menu.element().childNodes[6]).toBe(undefined);
651 });
652
653 it('should be prevable without active field', function () {
654 var menu = KorAP.HintMenu.create("cnx/", list);
655 menu.limit(3);
656 expect(menu.show()).toBe(true);
657 menu.prev();
658 expect(menu.shownItem(2).active()).toEqual(true);
659 expect(menu.shownItem(2).lcField()).toEqual(' syntax');
660 });
661
662 it('should be navigatable and filterable (prefix = "o")', function () {
663 var menu = KorAP.HintMenu.create("cnx/", list);
664 menu._firstActive = true;
665 menu.limit(2);
666
667 expect(menu.prefix("o").show()).toBe(true);
668 expect(menu.shownItem(0).name()).toEqual("Constituency");
669 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
670 expect(menu.shownItem(0).active()).toBe(true);
671 expect(menu.shownItem(1).name()).toEqual("Morphology");
672 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
673 expect(menu.shownItem(1).active()).toBe(false);
674 expect(menu.shownItem(2)).toBe(undefined);
675
676 // Next (1)
677 menu.next();
678 expect(menu.shownItem(0).name()).toEqual("Constituency");
679 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
680 expect(menu.shownItem(0).active()).toBe(false);
681 expect(menu.shownItem(1).name()).toEqual("Morphology");
682 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
683 expect(menu.shownItem(1).active()).toBe(true);
684 expect(menu.shownItem(2)).toBe(undefined);
685
686 // Next (2)
687 menu.next();
688 expect(menu.shownItem(0).name()).toEqual("Morphology");
689 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
690 expect(menu.shownItem(0).active()).toBe(false);
691 expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
692 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
693 expect(menu.shownItem(1).active()).toBe(true);
694 expect(menu.shownItem(2)).toBe(undefined);
695
696 // Next (3) - to prefix
697 menu.next();
698 expect(menu.shownItem(0).name()).toEqual("Morphology");
699 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
700 expect(menu.shownItem(0).active()).toBe(false);
701 expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
702 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
703 expect(menu.shownItem(1).active()).toBe(false);
704 expect(menu.shownItem(2)).toBe(undefined);
705
706 menu.next();
707 expect(menu.shownItem(0).name()).toEqual("Constituency");
708 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
709 expect(menu.shownItem(0).active()).toBe(true);
710 expect(menu.shownItem(1).name()).toEqual("Morphology");
711 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
712 expect(menu.shownItem(1).active()).toBe(false);
713 expect(menu.shownItem(2)).toBe(undefined);
714 });
715
716
717 it('should be navigatable and filterable (prefix = "ex", "e")', function () {
718 var menu = KorAP.HintMenu.create("cnx/", list);
719 menu._firstActive = true;
720
721 menu.limit(2);
722 expect(menu.prefix("ex").show()).toBe(true);
723
724 expect(menu.shownItem(0).name()).toEqual("Constituency");
725 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
726 expect(menu.shownItem(0).active()).toBe(true);
727 expect(menu.shownItem(1).name()).toEqual("Morphology");
728 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
729 expect(menu.shownItem(1).active()).toBe(false);
730 expect(menu.shownItem(2)).toBe(undefined);
731
732 // Next (1)
733 menu.next();
734 expect(menu.shownItem(0).name()).toEqual("Constituency");
735 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
736 expect(menu.shownItem(0).active()).toBe(false);
737 expect(menu.shownItem(1).name()).toEqual("Morphology");
738 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
739 expect(menu.shownItem(1).active()).toBe(true);
740 expect(menu.shownItem(2)).toBe(undefined);
741
742 // Next (2)
743 menu.next();
744
745 expect(menu.prefix()).toEqual('ex');
746 expect(menu.shownItem(0).name()).toEqual("Constituency");
747 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
748 expect(menu.shownItem(0).active()).toBe(false);
749
750 expect(menu.shownItem(1).name()).toEqual("Morphology");
751 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
752 expect(menu.shownItem(1).active()).toBe(false);
753 expect(menu.shownItem(2)).toBe(undefined);
754
755 // Reset limit
756 menu.limit(5);
757
758 // Change show
759 expect(menu.prefix("e").show()).toBe(true);
760 expect(menu._prefix.active()).toBe(false);
761 expect(menu.shownItem(0).name()).toEqual("Constituency");
762 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
763 expect(menu.shownItem(0).active()).toBe(true);
764 expect(menu.shownItem(1).name()).toEqual("Morphology");
765 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
766 expect(menu.shownItem(1).active()).toBe(false);
767 expect(menu.shownItem(2)).toBe(undefined);
768
769 // Next (1)
770 menu.next();
771 expect(menu._prefix.active()).toBe(false);
772 expect(menu.prefix()).toEqual('e');
773 expect(menu.shownItem(0).name()).toEqual("Constituency");
774 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
775 expect(menu.shownItem(0).active()).toBe(false);
776 expect(menu.shownItem(1).name()).toEqual("Morphology");
777 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
778 expect(menu.shownItem(1).active()).toBe(true);
779 expect(menu.shownItem(2)).toBe(undefined);
780
781 // Next (2)
782 menu.next();
783 expect(menu._prefix.active()).toBe(true);
784 expect(menu.shownItem(0).name()).toEqual("Constituency");
785 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
786 expect(menu.shownItem(0).active()).toBe(false);
787 expect(menu.shownItem(1).name()).toEqual("Morphology");
788 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
789 expect(menu.shownItem(1).active()).toBe(false);
790 expect(menu.shownItem(2)).toBe(undefined);
791
792 // Next (3)
793 menu.next();
794 expect(menu._prefix.active()).toBe(false);
795 expect(menu.shownItem(0).name()).toEqual("Constituency");
796 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
797 expect(menu.shownItem(0).active()).toBe(true);
798 expect(menu.shownItem(1).name()).toEqual("Morphology");
799 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
800 expect(menu.shownItem(1).active()).toBe(false);
801 expect(menu.shownItem(2)).toBe(undefined);
802 });
803
Akronacffc652017-12-18 21:21:25 +0100804 it('should be filterable (multiple prefix = "pro sin")', function () {
805 var menu = KorAP.HintMenu.create("drukola/p=", listMultiPrefix);
806 menu._firstActive = true;
807
808 menu.limit(2);
809 expect(menu.prefix("pro sin").show()).toBe(true);
810 expect(menu.shownItem(0).name()).toEqual("PPS");
811 expect(menu.element().childNodes[3].innerHTML).toEqual(
812 "<strong>PPS</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular</span>"
813 );
814
815 expect(menu.shownItem(0).active()).toBe(true);
816 expect(menu.shownItem(1).name()).toEqual("PPSA");
817 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>PPSA</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular, Accusative</span>");
818 expect(menu.shownItem(1).active()).toBe(false);
819
820 expect(menu.shownItem(2)).toBe(undefined);
821 });
Akronaba7a5a2016-08-15 21:58:33 +0200822
Akron359c7e12017-12-19 12:06:55 +0100823 it('should be filterable (trimming = " p")', function () {
824 var menu = KorAP.HintMenu.create("/p=", listMultiPrefix);
825 // menu._firstActive = true;
826
827 menu.limit(2);
828 expect(menu.show()).toBe(true);
829 menu._prefix.add(" ");
830 expect(menu.show()).toBe(true);
831 menu._prefix.add("p")
832 expect(menu.show()).toBe(true);
833 expect(menu.shownItem(0).name()).toEqual("PP");
834 expect(menu.element().childNodes[3].innerHTML).toEqual(
835 "<strong><mark>P</mark><mark>P</mark></strong>"+
836 "<span><mark>P</mark>ersonal <mark>P</mark>ronoun</span>"
837 );
838 });
839
840
Akronaba7a5a2016-08-15 21:58:33 +0200841 it('should choose prefix with failing prefix (1)', function () {
842 var menu = KorAP.HintMenu.create("cnx/", list);
843 menu.limit(2);
844 expect(menu.prefix("exit").show()).toBe(true);
845 expect(menu.element().querySelector('li')).toBe(null);
846 expect(menu.shownItem(0)).toBeUndefined();
847 expect(menu._prefix.active()).toBe(true);
848 });
849
850
851 it('should choose prefix with failing prefix (2)', function () {
852 var menu = KorAP.HintMenu.create("cnx/", list);
853 menu.limit(2);
854 expect(menu.show()).toBe(true);
855 expect(menu.prefix("exit").show()).toBe(true);
856 expect(menu.element().querySelector('li')).toBe(null);
857 expect(menu.shownItem(0)).toBeUndefined();
858 expect(menu._prefix.active()).toBe(true);
859 });
860
861 it('should ignore navigation with failing prefix', function () {
862 var menu = KorAP.HintMenu.create("cnx/", list);
863 menu.limit(2);
864 expect(menu.show()).toBe(true);
865
866 menu.next();
867
868 expect(menu.prefix("exit").show()).toBe(true);
869 expect(menu.element().querySelector('li')).toBe(null);
870 expect(menu.shownItem(0)).toBeUndefined();
871 expect(menu._prefix.active()).toBe(true);
872
873 menu.next();
874 expect(menu._prefix.active()).toBe(true);
875
876 menu.prev();
877 expect(menu._prefix.active()).toBe(true);
878
879 });
880
881 it('should be navigatable with prefix', function () {
882 var menu = KorAP.HintMenu.create("cnx/", demolist);
883 menu._firstActive = true;
884
885 menu.limit(3);
886
887 expect(menu.show()).toBe(true);
888 expect(menu.prefix()).toEqual("");
889
890 expect(menu.shownItem(0).name()).toEqual("Titel");
891 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
892 expect(menu.shownItem(0).active()).toBe(true);
893 expect(menu.shownItem(1).name()).toEqual("Untertitel");
894 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
895 expect(menu.shownItem(1).active()).toBe(false);
896 expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
897 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
898 expect(menu.shownItem(2).active()).toBe(false);
899 expect(menu.shownItem(3)).toBe(undefined);
900
901 menu._prefix.add('a');
902 expect(menu.show()).toBe(true);
903 expect(menu.prefix()).toEqual("a");
904 expect(menu.shownItem(0).name()).toEqual("Autor");
905 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
906
907 menu._prefix.add('u');
908 expect(menu.show()).toBe(true);
909 expect(menu.prefix()).toEqual("au");
910 expect(menu.shownItem(0).name()).toEqual("Autor");
911 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong><mark>Au</mark>tor</strong>");
912
913 menu._prefix.chop();
914 expect(menu.show()).toBe(true);
915 expect(menu.prefix()).toEqual("a");
916 expect(menu.shownItem(0).name()).toEqual("Autor");
917 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
918
919 menu._prefix.chop();
920 expect(menu.show()).toBe(true);
921 expect(menu.prefix()).toEqual("");
922 expect(menu.shownItem(0).name()).toEqual("Titel");
923 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
924 expect(menu.shownItem(0).active()).toBe(true);
925 expect(menu.shownItem(1).name()).toEqual("Untertitel");
926 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
927 expect(menu.shownItem(1).active()).toBe(false);
928 expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
929 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
930 expect(menu.shownItem(2).active()).toBe(false);
931 expect(menu.shownItem(3)).toBe(undefined);
932
933 // Forward
934 menu._prefix.chop();
935 expect(menu.show()).toBe(true);
936 expect(menu.prefix()).toEqual("");
937 expect(menu.shownItem(0).name()).toEqual("Titel");
938 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
939 expect(menu.shownItem(0).active()).toBe(true);
940 expect(menu.shownItem(1).name()).toEqual("Untertitel");
941 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
942 expect(menu.shownItem(1).active()).toBe(false);
943 expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
944 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
945 expect(menu.shownItem(2).active()).toBe(false);
946
947 // Forward
948 menu.next();
949 expect(menu.prefix()).toEqual("");
950 expect(menu.shownItem(0).name()).toEqual("Titel");
951 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
952 expect(menu.shownItem(0).active()).toBe(false);
953 expect(menu.shownItem(1).name()).toEqual("Untertitel");
954 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
955 expect(menu.shownItem(1).active()).toBe(true);
956 expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
957 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
958 expect(menu.shownItem(2).active()).toBe(false);
959 expect(menu.shownItem(3)).toBe(undefined);
960
961 // Forward
962 menu.next();
963 expect(menu.prefix()).toEqual("");
964 expect(menu.shownItem(0).name()).toEqual("Titel");
965 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
966 expect(menu.shownItem(0).active()).toBe(false);
967 expect(menu.shownItem(1).name()).toEqual("Untertitel");
968 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
969 expect(menu.shownItem(1).active()).toBe(false);
970 expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
971 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
972 expect(menu.shownItem(2).active()).toBe(true);
973 expect(menu.shownItem(3)).toBe(undefined);
974
975 // Forward
976 menu.next();
977 expect(menu.prefix()).toEqual("");
978 expect(menu.shownItem(0).name()).toEqual("Untertitel");
979 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertitel</strong>");
980 expect(menu.shownItem(0).active()).toBe(false);
981 expect(menu.shownItem(1).name()).toEqual("Veröffentlichungsdatum");
982 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
983 expect(menu.shownItem(1).active()).toBe(false);
984 expect(menu.shownItem(2).name()).toEqual("Länge");
985 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Länge</strong>");
986 expect(menu.shownItem(2).active()).toBe(true);
987 expect(menu.shownItem(3)).toBe(undefined);
988
989 // Forward
990 menu.next();
991 expect(menu.prefix()).toEqual("");
992 expect(menu.shownItem(0).name()).toEqual("Veröffentlichungsdatum");
993 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
994 expect(menu.shownItem(0).active()).toBe(false);
995 expect(menu.shownItem(1).name()).toEqual("Länge");
996 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Länge</strong>");
997 expect(menu.shownItem(1).active()).toBe(false);
998 expect(menu.shownItem(2).name()).toEqual("Autor");
999 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Autor</strong>");
1000 expect(menu.shownItem(2).active()).toBe(true);
1001 expect(menu.shownItem(3)).toBe(undefined);
1002
1003 // Forward
1004 menu.next();
1005 expect(menu.prefix()).toEqual("");
1006 expect(menu.shownItem(0).name()).toEqual("Titel");
1007 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
1008 expect(menu.shownItem(0).active()).toBe(true);
1009 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1010 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
1011 expect(menu.shownItem(1).active()).toBe(false);
1012 expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
1013 expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
1014 expect(menu.shownItem(2).active()).toBe(false);
1015 });
1016
1017
1018 it('should be navigatable with a prefix (1)', function () {
1019 var menu = KorAP.HintMenu.create("cnx/", demolist);
1020 menu._firstActive = true;
1021
1022 menu.limit(3);
1023
1024 expect(menu.show()).toBe(true);
1025 expect(menu.prefix()).toEqual("");
1026
1027 // Add prefix in uppercase - but check in lowercase
1028 menu.prefix('El');
1029 expect(menu.show()).toBe(true);
1030
1031 expect(menu.prefix()).toEqual("El");
1032 expect(menu._prefix.active()).toEqual(false);
1033 expect(menu.shownItem(0).name()).toEqual("Titel");
1034 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1035 expect(menu.shownItem(0).active()).toBe(true);
1036 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1037 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1038 expect(menu.shownItem(1).active()).toBe(false);
1039 expect(menu.shownItem(2)).toBe(undefined);
1040
1041 // Forward
1042 menu.next();
1043 expect(menu.prefix()).toEqual("El");
1044 expect(menu._prefix.active()).toEqual(false);
1045 expect(menu.shownItem(0).name()).toEqual("Titel");
1046 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1047 expect(menu.shownItem(0).active()).toBe(false);
1048 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1049 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1050 expect(menu.shownItem(1).active()).toBe(true);
1051 expect(menu.shownItem(2)).toBe(undefined);
1052
1053 // Forward
1054 menu.next();
1055 expect(menu.prefix()).toEqual("El");
1056 expect(menu._prefix.active()).toEqual(true);
1057 expect(menu.shownItem(0).name()).toEqual("Titel");
1058 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1059 expect(menu.shownItem(0).active()).toBe(false);
1060 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1061 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1062 expect(menu.shownItem(1).active()).toBe(false);
1063 expect(menu.shownItem(2)).toBe(undefined);
1064
1065 // Backward
1066 menu.prev();
1067 expect(menu.prefix()).toEqual("El");
1068 expect(menu._prefix.active()).toEqual(false);
1069 expect(menu.shownItem(0).name()).toEqual("Titel");
1070 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1071 expect(menu.shownItem(0).active()).toBe(false);
1072
1073 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1074 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1075 expect(menu.shownItem(1).active()).toBe(true);
1076 expect(menu.shownItem(2)).toBe(undefined);
1077 });
1078
1079
1080 it('should be navigatable with a prefix (2)', function () {
1081 var menu = KorAP.HintMenu.create("cnx/", demolist);
1082 menu._firstActive = true;
1083
1084 menu.limit(3);
1085 expect(menu.show()).toBe(true);
1086 expect(menu.prefix()).toEqual("");
1087 menu.prefix('el');
1088 expect(menu.show()).toBe(true);
1089
1090 expect(menu.prefix()).toEqual("el");
1091 expect(menu._prefix.active()).toEqual(false);
1092 expect(menu.shownItem(0).name()).toEqual("Titel");
1093 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1094 expect(menu.shownItem(0).active()).toBe(true);
1095 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1096 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1097 expect(menu.shownItem(1).active()).toBe(false);
1098 expect(menu.shownItem(2)).toBe(undefined);
1099
1100 // Backward
1101 menu.prev();
1102 expect(menu._prefix.active()).toEqual(true);
1103
1104 expect(menu.shownItem(0).name()).toEqual("Titel");
1105 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1106 expect(menu.shownItem(0).active()).toBe(false);
1107
1108 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1109 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1110 expect(menu.shownItem(1).active()).toBe(false);
1111 expect(menu.shownItem(2)).toBe(undefined);
1112
1113 // Backward
1114 menu.prev();
1115 expect(menu._prefix.active()).toEqual(false);
1116 expect(menu.shownItem(0).name()).toEqual("Titel");
1117 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1118 expect(menu.shownItem(0).active()).toBe(false);
1119 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1120 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1121 expect(menu.shownItem(1).active()).toBe(true);
1122 expect(menu.shownItem(2)).toBe(undefined);
1123 });
1124
1125 it('should be navigatable with a prefix (3)', function () {
1126 var menu = KorAP.HintMenu.create("cnx/", demolist);
1127 menu._firstActive = true;
1128 menu.limit(3);
1129 expect(menu.show()).toBe(true);
1130 expect(menu.prefix()).toEqual("");
1131 menu.prefix('el');
1132 expect(menu.show()).toBe(true);
1133
1134 expect(menu.prefix()).toEqual("el");
1135 expect(menu._prefix.active()).toEqual(false);
1136 expect(menu.shownItem(0).name()).toEqual("Titel");
1137 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1138 expect(menu.shownItem(0).active()).toBe(true);
1139 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1140 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1141 expect(menu.shownItem(1).active()).toBe(false);
1142 expect(menu.shownItem(2)).toBe(undefined);
1143
1144 // Backward
1145 menu.prev();
1146 expect(menu._prefix.active()).toEqual(true);
1147 expect(menu.shownItem(0).name()).toEqual("Titel");
1148 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1149 expect(menu.shownItem(0).active()).toBe(false);
1150 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1151 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1152 expect(menu.shownItem(1).active()).toBe(false);
1153 expect(menu.shownItem(2)).toBe(undefined);
1154
1155
1156 // Forward
1157 menu.next();
1158 expect(menu.prefix()).toEqual("el");
1159 expect(menu._prefix.active()).toEqual(false);
1160 expect(menu.shownItem(0).name()).toEqual("Titel");
1161 expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
1162 expect(menu.shownItem(0).active()).toBe(true);
1163 expect(menu.shownItem(1).name()).toEqual("Untertitel");
1164 expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
1165 expect(menu.shownItem(1).active()).toBe(false);
1166 expect(menu.shownItem(2)).toBe(undefined);
1167
1168 });
1169
1170 it('should show screens by offset', function () {
1171 var menu = KorAP.HintMenu.create('cnx/', demolist);
1172 menu.limit(3);
1173 expect(menu.show()).toBe(true);
1174
1175 expect(menu.shownItem(0).active()).toBe(false);
1176 expect(menu.shownItem(1).active()).toBe(false);
1177 expect(menu.shownItem(2).active()).toBe(false);
1178
1179 // Highlight the first entry
1180 menu.next();
1181
1182 expect(menu.shownItem(0).active()).toBe(true);
1183 expect(menu.shownItem(1).active()).toBe(false);
1184 expect(menu.shownItem(2).active()).toBe(false);
1185
1186 // Highlight the second entry
1187 menu.next();
1188
1189 expect(menu.shownItem(0).active()).toBe(false);
1190 expect(menu.shownItem(1).active()).toBe(true);
1191 expect(menu.shownItem(2).active()).toBe(false);
1192 expect(menu.shownItem(3)).toBe(undefined);
1193
1194 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1195 expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
1196
1197 // Move to first screen
1198 menu.screen(0);
1199 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1200 expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
1201 expect(menu.shownItem(0).active()).toBe(false);
1202 expect(menu.shownItem(1).active()).toBe(true);
1203 expect(menu.shownItem(2).active()).toBe(false);
1204 expect(menu.shownItem(3)).toBe(undefined);
1205
1206 // Move to second screen
1207 menu.screen(1);
1208 expect(menu.shownItem(0).lcField()).toEqual(' untertitel');
1209 expect(menu.shownItem(0).active()).toBe(true);
1210 expect(menu.shownItem(1).active()).toBe(false);
1211 expect(menu.shownItem(2).active()).toBe(false);
1212 expect(menu.shownItem(3)).toBe(undefined);
1213
1214 menu.screen(2);
1215 expect(menu.shownItem(0).lcField()).toEqual(' veröffentlichungsdatum');
1216 expect(menu.shownItem(0).active()).toBe(false);
1217 expect(menu.shownItem(1).active()).toBe(false);
1218 expect(menu.shownItem(2).active()).toBe(false);
1219 expect(menu.shownItem(3)).toBe(undefined);
1220
1221 menu.screen(1);
1222 expect(menu.shownItem(0).lcField()).toEqual(' untertitel');
1223 expect(menu.shownItem(0).active()).toBe(true);
1224 expect(menu.shownItem(1).active()).toBe(false);
1225 expect(menu.shownItem(2).active()).toBe(false);
1226 expect(menu.shownItem(3)).toBe(undefined);
1227 });
1228
1229 it('should show screens by offset when prefixed', function () {
1230 var menu = KorAP.HintMenu.create('cnx/', demolist);
1231 menu.limit(3);
1232 expect(menu.prefix("e").show()).toBe(true);
1233 expect(menu.shownItem(0).active()).toBe(false);
1234 expect(menu.shownItem(1).active()).toBe(false);
1235 expect(menu.shownItem(2).active()).toBe(false);
1236
1237 expect(menu.shownItem(0).element().innerHTML).toEqual('<strong>Tit<mark>e</mark>l</strong>');
1238 menu.screen(1);
1239 expect(menu.shownItem(0).element().innerHTML).toEqual('<strong>Unt<mark>e</mark>rtit<mark>e</mark>l</strong>');
1240 });
1241
1242
1243 it('should be page downable', function () {
1244 var menu = KorAP.OwnMenu.create(demolonglist);
1245 menu.limit(3);
1246
1247 expect(menu.show(0)).toBe(true);
1248
1249 expect(menu.shownItem(0).active()).toBe(true);
1250 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1251 expect(menu.shownItem(1).active()).toBe(false);
1252 expect(menu.shownItem(2).active()).toBe(false);
1253 expect(menu.shownItem(3)).toBe(undefined);
1254
1255 menu.pageDown();
1256
1257 expect(menu.shownItem(0).lcField()).toEqual(' länge');
1258 expect(menu.shownItem(0).active()).toBe(false);
1259 expect(menu.shownItem(1).active()).toBe(false);
1260 expect(menu.shownItem(2).active()).toBe(false);
1261
1262 menu.pageDown();
1263
1264 expect(menu.shownItem(0).lcField()).toEqual(' corpusid');
1265 expect(menu.shownItem(0).active()).toBe(false);
1266 expect(menu.shownItem(1).active()).toBe(false);
1267 expect(menu.shownItem(2).active()).toBe(false);
1268
1269 // Doesn't matter
1270 menu.pageDown();
1271
1272 expect(menu.shownItem(0).lcField()).toEqual(' corpusid');
1273 expect(menu.shownItem(0).active()).toBe(false);
1274 expect(menu.shownItem(1).active()).toBe(false);
1275 expect(menu.shownItem(2).active()).toBe(false);
1276 });
1277
1278 it('should be page downable with prefix', function () {
1279 var menu = KorAP.OwnMenu.create(demolonglist);
1280 menu.limit(3);
1281
1282 expect(menu.prefix('e').show(0)).toBe(true);
1283
1284 expect(menu.shownItem(0).active()).toBe(true);
1285 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1286 expect(menu.shownItem(1).active()).toBe(false);
1287 expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
1288 expect(menu.shownItem(2).active()).toBe(false);
1289 expect(menu.shownItem(2).lcField()).toEqual(' veröffentlichungsdatum');
1290 expect(menu.shownItem(3)).toBe(undefined);
1291
1292 menu.pageDown();
1293
1294 expect(menu.shownItem(0).active()).toBe(false);
1295 expect(menu.shownItem(0).lcField()).toEqual(' länge');
1296 expect(menu.shownItem(1).active()).toBe(false);
1297 expect(menu.shownItem(1).lcField()).toEqual(' genre');
1298 expect(menu.shownItem(2).active()).toBe(false);
1299 expect(menu.shownItem(2).lcField()).toEqual(' textid');
1300
1301 // Doesn't matter
1302 menu.pageDown();
1303
1304 expect(menu.shownItem(0).active()).toBe(false);
1305 expect(menu.shownItem(0).lcField()).toEqual(' länge');
1306 expect(menu.shownItem(1).active()).toBe(false);
1307 expect(menu.shownItem(1).lcField()).toEqual(' genre');
1308 expect(menu.shownItem(2).active()).toBe(false);
1309 expect(menu.shownItem(2).lcField()).toEqual(' textid');
1310 });
1311
1312
1313 it('should be page upable', function () {
1314 var menu = KorAP.OwnMenu.create(demolonglist);
1315 menu.limit(3);
1316
1317 // Choose the final value
1318 expect(menu.show(1000)).toBe(true);
1319
1320 expect(menu.shownItem(0).active()).toBe(false);
1321 expect(menu.shownItem(1).active()).toBe(false);
1322 expect(menu.shownItem(2).active()).toBe(true);
1323 expect(menu.shownItem(2).lcField()).toEqual(' textid');
1324 expect(menu.shownItem(3)).toBe(undefined);
1325
1326 menu.pageUp();
1327
1328 expect(menu.shownItem(0).lcField()).toEqual(' länge');
1329 expect(menu.shownItem(0).active()).toBe(false);
1330 expect(menu.shownItem(1).active()).toBe(false);
1331 expect(menu.shownItem(2).active()).toBe(false);
1332
1333 menu.pageUp();
1334
1335 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1336 expect(menu.shownItem(0).active()).toBe(false);
1337 expect(menu.shownItem(1).active()).toBe(false);
1338 expect(menu.shownItem(2).active()).toBe(false);
1339
1340 // Doesn't matter
1341 menu.pageUp();
1342
1343 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1344 expect(menu.shownItem(0).active()).toBe(false);
1345 expect(menu.shownItem(1).active()).toBe(false);
1346 expect(menu.shownItem(2).active()).toBe(false);
1347 });
1348
1349 it('should be page upable with prefix', function () {
1350 var menu = KorAP.OwnMenu.create(demolonglist);
1351 menu.limit(3);
1352
1353 // Choose the final value
1354 expect(menu.prefix("e").show(1000)).toBe(true);
1355
1356 expect(menu.shownItem(0).active()).toBe(false);
1357 expect(menu.shownItem(0).lcField()).toEqual(' länge');
1358 expect(menu.shownItem(1).active()).toBe(false);
1359 expect(menu.shownItem(1).lcField()).toEqual(' genre');
1360 expect(menu.shownItem(2).active()).toBe(true);
1361 expect(menu.shownItem(2).lcField()).toEqual(' textid');
1362 expect(menu.shownItem(3)).toBe(undefined);
1363
1364 menu.pageUp();
1365
1366 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1367 expect(menu.shownItem(0).active()).toBe(false);
1368 expect(menu.shownItem(1).active()).toBe(false);
1369 expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
1370 expect(menu.shownItem(2).active()).toBe(false);
1371 expect(menu.shownItem(2).lcField()).toEqual(' veröffentlichungsdatum');
1372
1373 // Doesn't matter
1374 menu.pageUp();
1375
1376 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1377 expect(menu.shownItem(0).active()).toBe(false);
1378 expect(menu.shownItem(1).active()).toBe(false);
1379 expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
1380 expect(menu.shownItem(2).active()).toBe(false);
1381 expect(menu.shownItem(2).lcField()).toEqual(' veröffentlichungsdatum');
1382 });
1383
Akrone817b882018-08-31 14:09:17 +02001384 it('should be view upable and downable (1)', function () {
1385 var menu = KorAP.OwnMenu.create(demolonglist);
1386 menu.limit(7);
1387
1388 // Choose the final value
1389 expect(menu.show(1)).toBe(true);
1390
1391 expect(menu.shownItem(0).active()).toBe(false);
1392 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1393 expect(menu.shownItem(1).active()).toBe(true);
1394 expect(menu.shownItem(2).active()).toBe(false);
1395 expect(menu.shownItem(2).lcField()).toEqual(' veröffentlichungsdatum');
1396 expect(menu.shownItem(6).active()).toBe(false);
1397 expect(menu.shownItem(7)).toBe(undefined);
1398
1399 // Doesn't change anything
1400 menu.viewUp();
1401
1402 expect(menu.shownItem(0).active()).toBe(false);
1403 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1404 expect(menu.shownItem(1).active()).toBe(true);
1405
1406 menu.viewDown();
1407
1408 expect(menu.shownItem(0).active()).toBe(true);
1409 expect(menu.shownItem(0).lcField()).toEqual(' untertitel');
1410 expect(menu.shownItem(1).active()).toBe(false);
1411
1412 menu.viewDown();
1413
1414 expect(menu.shownItem(0).active()).toBe(false);
1415 expect(menu.shownItem(0).lcField()).toEqual(' veröffentlichungsdatum');
1416 expect(menu.shownItem(1).active()).toBe(false);
1417
1418 // No effect anymore
1419 menu.viewDown();
1420
1421 expect(menu.shownItem(0).active()).toBe(false);
1422 expect(menu.shownItem(0).lcField()).toEqual(' veröffentlichungsdatum');
1423 expect(menu.shownItem(1).active()).toBe(false);
1424 });
1425
1426 it('should be view upable and downable (2)', function () {
1427
1428 // List is longer than limit
1429 var menu = KorAP.OwnMenu.create(demolist);
1430 menu.limit(7);
1431
1432 // Choose the final value
1433 expect(menu.show(1)).toBe(true);
1434
1435 expect(menu.shownItem(0).active()).toBe(false);
1436 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1437 expect(menu.shownItem(1).active()).toBe(true);
1438 expect(menu.shownItem(2).active()).toBe(false);
1439 expect(menu.shownItem(2).lcField()).toEqual(' veröffentlichungsdatum');
1440 expect(menu.shownItem(4).active()).toBe(false);
1441 expect(menu.shownItem(5)).toBe(undefined);
1442
1443 // Doesn't change anything
1444 menu.viewUp();
1445
1446 expect(menu.shownItem(0).active()).toBe(false);
1447 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1448 expect(menu.shownItem(1).active()).toBe(true);
1449
1450 menu.viewDown();
1451
1452 expect(menu.shownItem(0).active()).toBe(false);
1453 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1454 expect(menu.shownItem(1).active()).toBe(true);
1455 });
1456
1457
Akronaba7a5a2016-08-15 21:58:33 +02001458 it('should scroll to a chosen value (1)', function () {
1459 var menu = KorAP.OwnMenu.create(demolist);
1460 menu.limit(3);
1461
1462 // Choose value 1
1463 expect(menu.show(1)).toBe(true);
1464
1465 expect(menu.shownItem(0).active()).toBe(false);
1466 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1467 expect(menu.shownItem(1).active()).toBe(true);
1468 expect(menu.shownItem(2).active()).toBe(false);
1469 expect(menu.shownItem(3)).toBe(undefined);
1470
1471 // Choose value 2
1472 expect(menu.show(2)).toBe(true);
1473
1474 expect(menu.shownItem(0).active()).toBe(false);
1475 expect(menu.shownItem(0).lcField()).toEqual(' titel');
1476 expect(menu.shownItem(1).active()).toBe(false);
1477 expect(menu.shownItem(2).active()).toBe(true);
1478 expect(menu.shownItem(3)).toBe(undefined);
1479 });
1480
1481 it('should scroll to a chosen value (2)', function () {
1482 var menu = KorAP.OwnMenu.create(demolonglist);
1483
1484 // Choose value 3
1485 expect(menu.limit(3).show(3)).toBe(true);
1486 expect(menu.shownItem(0).lcField()).toEqual(' länge');
1487 expect(menu.shownItem(0).active()).toBe(true);
1488 expect(menu.shownItem(1).active()).toBe(false);
1489 expect(menu.shownItem(2).active()).toBe(false);
1490 expect(menu.shownItem(3)).toBe(undefined);
1491 });
1492
1493 xit('should scroll to a chosen value after prefixing, if the chosen value is live');
1494 });
1495
1496 describe('KorAP.Prefix', function () {
1497 it('should be initializable', function () {
1498 var p = prefixClass.create();
1499 expect(p.element().classList.contains('pref')).toBeTruthy();
1500 expect(p.isSet()).not.toBeTruthy();
1501
1502 /*
1503 expect(mi.lcField()).toEqual(' baum');
1504 */
1505
1506 });
1507
1508 it('should be modifiable', function () {
1509 var p = prefixClass.create();
1510 expect(p.value()).toEqual('');
1511 expect(p.element().firstChild).toBeNull();
1512
1513 // Set string
1514 expect(p.value('Test')).toEqual('Test');
1515 expect(p.value()).toEqual('Test');
1516 expect(p.element().firstChild.nodeValue).toEqual('Test');
1517
1518 // Add string
1519 expect(p.add('ified')).toEqual('Testified');
1520 expect(p.value()).toEqual('Testified');
1521 expect(p.element().firstChild.nodeValue).toEqual('Testified');
1522
1523 // Clear string
1524 p.clear();
1525 expect(p.value()).toEqual('');
1526 expect(p.element().firstChild).toBeNull();
1527
1528 // Set string
1529 expect(p.value('Test')).toEqual('Test');
1530 expect(p.value()).toEqual('Test');
1531 expect(p.element().firstChild.nodeValue).toEqual('Test');
1532
1533 expect(p.chop()).toEqual('Tes');
1534 expect(p.value()).toEqual('Tes');
1535 expect(p.element().firstChild.nodeValue).toEqual('Tes');
1536
1537 expect(p.chop()).toEqual('Te');
1538 expect(p.value()).toEqual('Te');
1539 expect(p.element().firstChild.nodeValue).toEqual('Te');
1540
1541 expect(p.chop()).toEqual('T');
1542 expect(p.value()).toEqual('T');
1543 expect(p.element().firstChild.nodeValue).toEqual('T');
1544
1545 expect(p.chop()).toEqual('');
1546 expect(p.value()).toEqual('');
1547 expect(p.element().firstChild).toBeNull();
1548 });
1549
1550 it('should be activatable', function () {
1551 var p = prefixClass.create();
1552 expect(p.value()).toEqual('');
1553 expect(p.element().firstChild).toBeNull();
1554
1555 expect(p.value('Test')).toEqual('Test');
1556 expect(p.element().firstChild.nodeValue).toEqual('Test');
1557
1558 expect(p.active()).not.toBeTruthy();
1559 expect(p.element().classList.contains('active')).not.toBeTruthy();
1560
1561 p.active(true);
1562 expect(p.active()).toBeTruthy();
1563 expect(p.element().classList.contains('active')).toBeTruthy();
1564 });
1565 });
1566
1567 describe('KorAP.LengthField', function () {
1568 it('should be initializable', function () {
1569 var l = lengthFieldClass.create();
1570 expect(l.element().classList.contains('lengthField')).toBeTruthy();
1571 expect(l.element().children.length).toEqual(0);
1572 });
1573
1574 it('should be extensible', function () {
1575 var l = lengthFieldClass.create();
1576 l.add(['Baum']);
1577 expect(l.element().children.length).toEqual(1);
1578 expect(l.element().children[0].nodeName).toEqual('SPAN');
1579 expect(l.element().children[0].textContent).toEqual('Baum--');
1580 l.add(['Fragezeichen']);
1581 expect(l.element().children.length).toEqual(2);
1582 expect(l.element().children[1].nodeName).toEqual('SPAN');
1583 expect(l.element().children[1].textContent).toEqual('Fragezeichen--');
1584 });
1585
1586 it('should be correctly initializable', function () {
1587 var list = [
1588 ["Constituency"],
1589 ["Lemma"],
1590 ["Morphology"],
1591 ["Part-of-Speech"],
1592 ["Syntax"]
1593 ];
1594
1595 var menu = KorAP.OwnMenu.create(list);
1596
1597 expect(menu.lengthField().element().children.length).toEqual(5);
1598 });
1599 });
1600
1601 describe('KorAP.Slider', function () {
1602
1603 var demolonglist = [
1604 ['Titel', 'title'],
1605 ['Untertitel', 'subTitle'],
1606 ['Veröffentlichungsdatum', 'pubDate'],
1607 ['Länge', 'length'],
1608 ['Autor', 'author'],
1609 ['Genre', 'genre'],
1610 ['corpusID', 'corpusID'],
1611 ['docID', 'docID'],
1612 ['textID', 'textID'],
1613 ];
1614
1615 it('should correctly be initializable', function () {
1616 var list = [
1617 ["Constituency"],
1618 ["Lemma"],
1619 ["Morphology"],
1620 ["Part-of-Speech"],
1621 ["Syntax"]
1622 ];
1623
1624 var menu = KorAP.OwnMenu.create(list);
1625
1626 menu._firstActive = true;
1627 menu.limit(3);
1628
1629 expect(menu.show()).toBe(true);
1630
1631 expect(menu.shownItem(0).active()).toBe(true);
1632 expect(menu.shownItem(1).active()).toBe(false);
1633 expect(menu.shownItem(2).active()).toBe(false);
1634 expect(menu.slider().offset()).toEqual(0);
1635 expect(menu.position).toEqual(0);
1636 });
1637
1638 it('should correctly move on arrow keys', function () {
1639 var list = [
1640 ["Constituency"],
1641 ["Lemma"],
1642 ["Morphology"],
1643 ["Part-of-Speech"],
1644 ["Syntax"]
1645 ];
1646
1647 var menu = KorAP.OwnMenu.create(list);
1648
1649 menu._firstActive = true;
1650 menu.limit(3);
1651
1652 expect(menu.show()).toBe(true);
1653
1654 menu.next();
1655 expect(menu.shownItem(0).active()).toBe(false);
1656 expect(menu.shownItem(1).active()).toBe(true);
1657 expect(menu.shownItem(2).active()).toBe(false);
1658 expect(menu.slider().offset()).toEqual(0);
1659 expect(menu.position).toEqual(1);
1660
1661 menu.next();
1662 expect(menu.shownItem(0).active()).toBe(false);
1663 expect(menu.shownItem(1).active()).toBe(false);
1664 expect(menu.shownItem(2).active()).toBe(true);
1665 expect(menu.slider().offset()).toEqual(0);
1666 expect(menu.position).toEqual(2);
1667
1668 menu.next();
1669 expect(menu.shownItem(0).active()).toBe(false);
1670 expect(menu.shownItem(1).active()).toBe(false);
1671 expect(menu.shownItem(2).active()).toBe(true);
1672 expect(menu.slider().offset()).toEqual(1);
1673 expect(menu.position).toEqual(3);
1674
1675 menu.next();
1676 expect(menu.shownItem(0).active()).toBe(false);
1677 expect(menu.shownItem(1).active()).toBe(false);
1678 expect(menu.shownItem(2).active()).toBe(true);
1679 expect(menu.slider().offset()).toEqual(2);
1680 expect(menu.position).toEqual(4);
1681
1682 menu.next();
1683 expect(menu.shownItem(0).active()).toBe(true);
1684 expect(menu.shownItem(1).active()).toBe(false);
1685 expect(menu.shownItem(2).active()).toBe(false);
1686 expect(menu.slider().offset()).toEqual(0);
1687 expect(menu.position).toEqual(0);
1688
1689 expect(menu.slider()._slider.style.height).toEqual('60%');
1690 });
1691
1692 it('should correctly resize on prefixing', function () {
1693 var menu = KorAP.OwnMenu.create(demolonglist);
1694 menu._firstActive = true;
1695 menu.limit(3);
1696
1697 expect(menu.show()).toBe(true);
1698 expect(menu.slider().offset()).toEqual(0);
1699 expect(menu.slider().length()).toEqual(9);
1700
1701 expect(menu.prefix("e").show()).toBe(true);
1702 expect(menu.slider().length()).toEqual(6);
1703
1704 expect(menu.prefix("el").show()).toBe(true);
1705 expect(menu.slider().length()).toEqual(2);
1706
1707 expect(menu.prefix("e").show()).toBe(true);
1708 expect(menu.slider().length()).toEqual(6);
1709
1710 expect(menu.prefix("").show()).toBe(true);
1711 expect(menu.slider().length()).toEqual(9);
1712 });
1713
1714
1715 it('should correctly move the list on mousemove', function () {
1716 var list = [
1717 ["Constituency"],
1718 ["Lemma"],
1719 ["Morphology"],
1720 ["Part-of-Speech"],
1721 ["Syntax"]
1722 ];
1723
1724 var menu = KorAP.OwnMenu.create(list);
1725
1726 menu._firstActive = true;
1727 menu.limit(3);
1728
1729 expect(menu.show()).toBe(true);
1730
1731 expect(menu.shownItem(0).active()).toBe(true);
1732 expect(menu.shownItem(1).active()).toBe(false);
1733 expect(menu.shownItem(2).active()).toBe(false);
1734 expect(menu.slider().offset()).toEqual(0);
1735
1736 // This will normally be done on
1737 menu.slider()._rulerHeight = 100;
1738 menu.slider()._sliderHeight = 40;
1739 menu.slider()._event.initOffset = 0;
1740 expect(menu.slider().length()).toEqual(5);
1741
1742 menu.slider().movetoRel(10);
1743 expect(menu.slider().offset()).toEqual(0);
1744
1745 expect(menu.shownItem(0).active()).toBe(true);
1746 expect(menu.shownItem(0).lcField()).toEqual(' constituency');
1747 menu.slider().movetoRel(24);
1748 expect(menu.slider().offset()).toEqual(0);
1749 menu.slider().movetoRel(25);
1750 expect(menu.slider().offset()).toEqual(0);
1751
1752 menu.slider().movetoRel(30);
1753 expect(menu.slider().offset()).toEqual(1);
1754 menu.slider().movetoRel(59);
1755 expect(menu.slider().offset()).toEqual(1);
1756 expect(menu.shownItem(0).active()).toBe(false);
1757 expect(menu.shownItem(0).lcField()).toEqual(' lemma');
1758
1759 // Everything > 60 is offset 2
1760 menu.slider().movetoRel(60);
1761 expect(menu.slider().offset()).toEqual(2);
1762 menu.slider().movetoRel(180);
1763 expect(menu.slider().offset()).toEqual(2);
1764 expect(menu.shownItem(0).active()).toBe(false);
1765 expect(menu.shownItem(0).lcField()).toEqual(' morphology');
1766
1767 expect(menu.shownItem(1).active()).toBe(false);
1768 expect(menu.shownItem(2).active()).toBe(false);
1769
1770 // When the active cursor moves again - scroll to viewport
1771 // cursor is before viewport
1772 menu.next();
1773 expect(menu.shownItem(0).active()).toBe(true);
1774 expect(menu.shownItem(0).lcField()).toEqual(' lemma');
1775 expect(menu.shownItem(1).active()).toBe(false);
1776 expect(menu.shownItem(2).active()).toBe(false);
1777
1778 menu.next();
1779 menu.next();
1780 expect(menu.shownItem(0).active()).toBe(false);
1781 expect(menu.shownItem(0).lcField()).toEqual(' lemma');
1782 expect(menu.shownItem(1).active()).toBe(false);
1783 expect(menu.shownItem(1).lcField()).toEqual(' morphology');
1784 expect(menu.shownItem(2).active()).toBe(true);
1785 expect(menu.shownItem(2).lcField()).toEqual(' part-of-speech');
1786
1787 menu.slider().movetoRel(0);
1788 expect(menu.slider().offset()).toEqual(0);
1789 expect(menu.shownItem(0).active()).toBe(false);
1790 expect(menu.shownItem(0).lcField()).toEqual(' constituency');
1791 expect(menu.shownItem(1).active()).toBe(false);
1792 expect(menu.shownItem(1).lcField()).toEqual(' lemma');
1793 expect(menu.shownItem(2).active()).toBe(false);
1794 expect(menu.shownItem(2).lcField()).toEqual(' morphology');
1795
1796 // cursor is after viewport
1797 menu.next();
1798 expect(menu.slider().offset()).toEqual(2);
1799 expect(menu.shownItem(0).active()).toBe(false);
1800 expect(menu.shownItem(0).lcField()).toEqual(' morphology');
1801 expect(menu.shownItem(1).active()).toBe(false);
1802 expect(menu.shownItem(1).lcField()).toEqual(' part-of-speech');
1803 expect(menu.shownItem(2).active()).toBe(true);
1804 expect(menu.shownItem(2).lcField()).toEqual(' syntax');
1805
1806 menu.slider().movetoRel(0);
1807 expect(menu.slider().offset()).toEqual(0);
1808 expect(menu.shownItem(0).active()).toBe(false);
1809 expect(menu.shownItem(0).lcField()).toEqual(' constituency');
1810 expect(menu.shownItem(1).active()).toBe(false);
1811 expect(menu.shownItem(1).lcField()).toEqual(' lemma');
1812 expect(menu.shownItem(2).active()).toBe(false);
1813 expect(menu.shownItem(2).lcField()).toEqual(' morphology');
1814
1815 menu.prev();
1816 expect(menu.slider().offset()).toEqual(2);
1817 expect(menu.shownItem(0).lcField()).toEqual(' morphology');
1818 expect(menu.shownItem(0).active()).toBe(false);
1819 expect(menu.shownItem(1).lcField()).toEqual(' part-of-speech');
1820 expect(menu.shownItem(1).active()).toBe(true);
1821 expect(menu.shownItem(2).lcField()).toEqual(' syntax');
1822 expect(menu.shownItem(2).active()).toBe(false);
1823
1824 menu.prev();
1825 menu.prev();
1826 expect(menu.slider().offset()).toEqual(1);
1827 expect(menu.shownItem(0).lcField()).toEqual(' lemma');
1828 expect(menu.shownItem(0).active()).toBe(true);
1829 expect(menu.shownItem(1).lcField()).toEqual(' morphology');
1830 expect(menu.shownItem(1).active()).toBe(false);
1831 expect(menu.shownItem(2).lcField()).toEqual(' part-of-speech');
1832 expect(menu.shownItem(2).active()).toBe(false);
1833
1834 menu.slider().movetoRel(100);
1835 expect(menu.slider().offset()).toEqual(2);
1836 expect(menu.shownItem(0).lcField()).toEqual(' morphology');
1837 expect(menu.shownItem(0).active()).toBe(false);
1838 expect(menu.shownItem(1).lcField()).toEqual(' part-of-speech');
1839 expect(menu.shownItem(1).active()).toBe(false);
1840 expect(menu.shownItem(2).lcField()).toEqual(' syntax');
1841 expect(menu.shownItem(2).active()).toBe(false);
1842
1843 menu.prev();
1844 expect(menu.slider().offset()).toEqual(0);
1845 expect(menu.shownItem(0).lcField()).toEqual(' constituency');
1846 expect(menu.shownItem(0).active()).toBe(true);
1847 expect(menu.shownItem(1).lcField()).toEqual(' lemma');
1848 expect(menu.shownItem(1).active()).toBe(false);
1849 expect(menu.shownItem(2).lcField()).toEqual(' morphology');
1850 expect(menu.shownItem(2).active()).toBe(false);
1851 });
1852 });
1853
1854 describe('KorAP.MenuBenchmark', function () {
1855 var menu = menuClass.create([
1856 ['Titel', 'title'],
1857 ['Untertitel', 'subTitle'],
1858 ['Veröffentlichungsdatum', 'pubDate'],
1859 ['Länge', 'length'],
1860 ['Autor', 'author']
1861 ]);
1862
1863 menu.limit(3).show();
1864
1865 // Some actions
1866 menu.next();
1867 menu.next();
1868 menu.prev();
1869 menu.prev();
1870 menu.prev();
Nils Diewald7c8ced22015-04-15 19:21:00 +00001871
Akron3c2730f2016-05-24 15:08:29 +02001872 menu.pageDown();
Akron3c2730f2016-05-24 15:08:29 +02001873 menu.pageUp();
1874
Akronaba7a5a2016-08-15 21:58:33 +02001875 // There is no fourth item in the list!
1876 menu.prefix('e').show(4);
Akron5a1f5bb2016-05-23 22:00:39 +02001877 menu.next();
1878 menu.next();
Akron5a1f5bb2016-05-23 22:00:39 +02001879 menu.prev();
1880 menu.prev();
Akron5a1f5bb2016-05-23 22:00:39 +02001881 menu.prev();
Akronf86eaea2016-05-13 18:02:27 +02001882 });
1883 });