blob: 2b3fcf3a1c767a506661343395a8ef73722c4396 [file] [log] [blame]
define(['menu', 'menu/item', 'menu/prefix', 'menu/lengthField'],
function (menuClass, menuItemClass, prefixClass, lengthFieldClass) {
// The OwnMenu item
KorAP.OwnMenuItem = {
create : function (params) {
return Object.create(menuItemClass).upgradeTo(KorAP.OwnMenuItem)._init(params);
},
content : function (content) {
if (arguments.length === 1) {
this._content = content;
};
return this._content;
},
_init : function (params) {
if (params[0] === undefined)
throw new Error("Missing parameters");
this._content = document.createTextNode(params[0]);
this._lcField = ' ' + this.content().textContent.toLowerCase();
return this;
}
};
// The OwnMenu
KorAP.OwnMenu = {
create : function (params) {
return Object.create(menuClass)
.upgradeTo(KorAP.OwnMenu)
._init(KorAP.OwnMenuItem, undefined, undefined, params);
}
};
// HintMenuItem
KorAP.HintMenuItem = {
create : function (params) {
return Object.create(menuItemClass)
.upgradeTo(KorAP.HintMenuItem)
._init(params);
},
content : function (content) {
if (arguments.length === 1) {
this._content = content;
};
return this._content;
},
_init : function (params) {
if (params[0] === undefined || params[1] === undefined)
throw new Error("Missing parameters");
this._name = params[0];
this._action = params[1];
this._lcField = ' ' + this._name.toLowerCase();
if (params.length > 2) {
this._desc = params[2];
this._lcField += " " + this._desc.toLowerCase();
};
return this;
},
name : function () {
return this._name;
},
action : function () {
return this._action;
},
desc : function () {
return this._desc;
},
element : function () {
// already defined
if (this._element !== undefined)
return this._element;
// Create list item
var li = document.createElement("li");
li.setAttribute("data-action", this._action);
// Create title
var name = document.createElement("strong");
name.appendChild(document.createTextNode(this._name));
li.appendChild(name);
// Create description
if (this._desc !== undefined) {
var desc = document.createElement("span");
desc.appendChild(document.createTextNode(this._desc));
li.appendChild(desc);
};
return this._element = li;
}
};
// HintMenu
KorAP.HintMenu = {
create : function (context, params) {
var obj = Object.create(menuClass)
.upgradeTo(KorAP.HintMenu)
._init(KorAP.HintMenuItem, undefined, undefined, params);
obj._context = context;
return obj;
}
};
// The ComplexMenuItem
KorAP.ComplexMenuItem = {
create : function (params) {
return Object.create(menuItemClass)
.upgradeTo(KorAP.ComplexMenuItem)
._init(params);
},
content : function (content) {
if (arguments.length === 1) {
this._content = content;
};
return this._content;
},
_init : function (params) {
if (params[0] === undefined)
throw new Error("Missing parameters");
var r = document.createElement('div');
for (var i = 1; i <= params.length; i++) {
var h = document.createElement('h' + i);
h.appendChild(document.createTextNode(params[i-1]));
r.appendChild(h);
};
this._content = r;
this._lcField = ' ' + this.content().textContent.toLowerCase();
return this;
}
};
describe('KorAP.MenuItem', function () {
it('should be initializable', function () {
expect(
function() { menuItemClass.create([]) }
).toThrow(new Error("Missing parameters"));
expect(
function() { KorAP.OwnMenuItem.create([]) }
).toThrow(new Error("Missing parameters"));
var mi = KorAP.OwnMenuItem.create(["Baum"]);
expect(mi.element().firstChild.nodeValue).toEqual('Baum');
expect(mi.lcField()).toEqual(' baum');
});
it('shouldn\'t have a reference to the menu', function () {
var menuItem = KorAP.OwnMenuItem.create(['Test']);
expect(menuItem.menu()).toBe(undefined);
});
it('should be activatable and deactivateable by class', function () {
var menuItem = KorAP.OwnMenuItem.create(['Test']);
expect(menuItem.active()).toBe(false);
expect(menuItem.element().getAttribute("class")).toBe(null);
menuItem.active(true);
expect(menuItem.active()).toBe(true);
expect(menuItem.element().getAttribute("class")).toEqual("active");
menuItem.active(false); // Is active
expect(menuItem.active()).toBe(false);
expect(menuItem.element().getAttribute("class")).toEqual("");
menuItem.active(true);
expect(menuItem.active()).toBe(true);
expect(menuItem.element().getAttribute("class")).toEqual("active");
menuItem = KorAP.OwnMenuItem.create(['Spiegel']);
expect(menuItem.active()).toBe(false);
expect(menuItem.element().getAttribute("class")).toBe(null);
menuItem.active(false); // Is not active
expect(menuItem.active()).toBe(false);
expect(menuItem.element().getAttribute("class")).toBe(null);
});
it('should be set to boundary', function () {
var menuItem = KorAP.OwnMenuItem.create(['CoreNLP']);
expect(menuItem.active()).toBe(false);
expect(menuItem.element().getAttribute("class")).toBe(null);
// Set active
menuItem.active(true);
expect(menuItem.active()).toBe(true);
expect(menuItem.noMore()).toBe(false);
expect(menuItem.element().getAttribute("class")).toEqual("active");
// Set no more
menuItem.noMore(true);
expect(menuItem.active()).toBe(true);
expect(menuItem.noMore()).toBe(true);
expect(menuItem.element().getAttribute("class")).toEqual("active no-more");
// No no more
menuItem.noMore(false);
expect(menuItem.active()).toBe(true);
expect(menuItem.noMore()).toBe(false);
expect(menuItem.element().getAttribute("class")).toEqual("active");
// Set no more, deactivate
menuItem.noMore(true);
menuItem.active(false);
expect(menuItem.active()).toBe(false);
expect(menuItem.noMore()).toBe(true);
expect(menuItem.element().getAttribute("class")).toEqual("no-more");
// Set active
menuItem.active(true);
expect(menuItem.active()).toBe(true);
expect(menuItem.noMore()).toBe(true);
expect(menuItem.element().getAttribute("class")).toEqual("no-more active");
});
it('should be highlightable', function () {
// Highlight in the middle
var menuItem = KorAP.OwnMenuItem.create(['CoreNLP']);
menuItem.highlight("ren");
expect(menuItem.element().innerHTML).toEqual("Co<mark>reN</mark>LP");
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual("CoreNLP");
var plain = "<div><h1>CoreNLP</h1><h2>corenlp/</h2></div>";
// Starting highlight
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
menuItem.highlight("cor");
expect(menuItem.element().innerHTML).toEqual("<div><h1><mark>Cor</mark>eNLP</h1><h2><mark>cor</mark>enlp/</h2></div>");
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
// Starting highlight - short
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
menuItem.highlight("c");
expect(menuItem.element().innerHTML).toEqual("<div><h1><mark>C</mark>oreNLP</h1><h2><mark>c</mark>orenlp/</h2></div>");
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
// Highlight at the end
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
menuItem.highlight("nlp");
expect(menuItem.element().innerHTML).toEqual("<div><h1>Core<mark>NLP</mark></h1><h2>core<mark>nlp</mark>/</h2></div>");
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
// Highlight at the end - short
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
menuItem.highlight("p");
expect(menuItem.element().innerHTML).toEqual("<div><h1>CoreNL<mark>P</mark></h1><h2>corenl<mark>p</mark>/</h2></div>");
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
// No highlight
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/']);
menuItem.highlight("xp");
expect(menuItem.element().innerHTML).toEqual(plain);
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
// Highlight in the middle - first
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
menuItem.highlight("ren");
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>");
plain = "<div><h1>CoreNLP</h1><h2>corenlp/</h2><h3>This is my Example</h3></div>"
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
// Highlight in the middle - second
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
menuItem.highlight("ampl");
expect(menuItem.element().innerHTML).toEqual("<div><h1>CoreNLP</h1><h2>corenlp/</h2><h3>This is my Ex<mark>ampl</mark>e</h3></div>");
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
// Highlight in the middle - both
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
menuItem.highlight("e");
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>");
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
// Highlight in the end - second
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
menuItem.highlight("le");
expect(menuItem.element().innerHTML).toEqual("<div><h1>CoreNLP</h1><h2>corenlp/</h2><h3>This is my Examp<mark>le</mark></h3></div>");
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
// Highlight at the beginning - second
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
menuItem.highlight("this");
expect(menuItem.element().innerHTML).toEqual("<div><h1>CoreNLP</h1><h2>corenlp/</h2><h3><mark>This</mark> is my Example</h3></div>");
menuItem.lowlight();
expect(menuItem.element().innerHTML).toEqual(plain);
});
});
describe('KorAP.Menu', function () {
var list = [
["Constituency", "c=", "Example 1"],
["Lemma", "l="],
["Morphology", "m=", "Example 2"],
["Part-of-Speech", "p="],
["Syntax", "syn="]
];
var demolist = [
['Titel', 'title'],
['Untertitel', 'subTitle'],
['Veröffentlichungsdatum', 'pubDate'],
['Länge', 'length'],
['Autor', 'author']
];
var demolonglist = [
['Titel', 'title'],
['Untertitel', 'subTitle'],
['Veröffentlichungsdatum', 'pubDate'],
['Länge', 'length'],
['Autor', 'author'],
['Genre', 'genre'],
['corpusID', 'corpusID'],
['docID', 'docID'],
['textID', 'textID'],
];
it('should be initializable', function () {
var list = [
["Constituency"],
["Lemma"],
["Morphology"],
["Part-of-Speech"],
["Syntax"]
];
var menu = KorAP.OwnMenu.create(list);
menu._firstActive = true;
expect(menu.itemClass()).toEqual(KorAP.OwnMenuItem);
expect(menu.element().nodeName).toEqual('UL');
expect(menu.element().style.opacity).toEqual("0");
expect(menu.limit()).toEqual(8);
menu.limit(9);
expect(menu.limit()).toEqual(9);
menu.limit(8);
// view
menu.show();
// First element in list
expect(menu.item(0).active()).toBe(true);
expect(menu.item(0).noMore()).toBe(true);
// Middle element in list
expect(menu.item(2).active()).toBe(false);
expect(menu.item(2).noMore()).toBe(false);
// Last element in list
expect(menu.item(menu.length() - 1).active()).toBe(false);
expect(menu.item(menu.length() - 1).noMore()).toBe(true);
});
it('should have a reference to the menu', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
expect(menu.item(0).menu()).toEqual(menu);
menu = KorAP.HintMenu.create("cnx/", list);
expect(menu.element().menu).toEqual(menu);
});
it('should be visible', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
expect(menu.unshow()).toBe(undefined);
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
expect(menu.element().childNodes[4].getAttribute("data-action")).toEqual("l=");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.element().childNodes[6]).toBe(undefined);
// Check boundaries
expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(true);
expect(menu.element().childNodes[4].classList.contains("no-more")).toBe(false);
expect(menu.element().childNodes[5].classList.contains("no-more")).toBe(false);
});
it('should be filterable', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
menu.limit(3);
expect(menu.prefix("o").show()).toBe(true);
expect(menu.element().childNodes[0].innerHTML).toEqual("o");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
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>");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
expect(menu.element().childNodes[6]).toBe(undefined);
// Check boundaries
expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(true);
expect(menu.element().childNodes[4].classList.contains("no-more")).toBe(false);
expect(menu.element().childNodes[5].classList.contains("no-more")).toBe(true);
menu.limit(2);
expect(menu.prefix("o").show()).toBe(true);
expect(menu.element().childNodes[0].innerHTML).toEqual("o");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
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>");
expect(menu.element().childNodes[5]).toBe(undefined);
// Check boundaries
expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(true);
expect(menu.element().childNodes[4].classList.contains("no-more")).toBe(false);
expect(menu.element().childNodes[5]).toBe(undefined);
expect(menu.prefix("e").show()).toBe(true);
expect(menu.element().childNodes[0].innerHTML).toEqual("e");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
expect(menu.element().childNodes[5]).toBe(undefined);
menu.limit(5);
expect(menu.prefix("a").show()).toBe(true);
expect(menu.element().childNodes[0].innerHTML).toEqual("a");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Ex<mark>a</mark>mple 1</span>");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemm<mark>a</mark></strong>");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Ex<mark>a</mark>mple 2</span>");
expect(menu.element().childNodes[6].innerHTML).toEqual("<strong>P<mark>a</mark>rt-of-Speech</strong>");
expect(menu.element().childNodes[7].innerHTML).toEqual("<strong>Synt<mark>a</mark>x</strong>");
expect(menu.element().childNodes[8]).toBe(undefined);
});
it('should be nextable', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
menu._firstActive = true;
// Show only 3 items
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate next (1)
menu.next();
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate next (2)
menu.next();
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate next (3)
// scroll!
menu.next();
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemma</strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate next (4)
menu.next();
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Syntax</strong>");
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate next (5) - ROLL
menu.next();
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
// Active next (6)
menu.next();
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
});
it('should be prevable', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
menu._firstActive = true;
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Lemma</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate prev (1) - roll to bottom
menu.prev();
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Syntax</strong>");
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate prev (2)
menu.prev();
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Syntax</strong>");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate prev (3)
menu.prev();
expect(menu.shownItem(0).name()).toEqual("Morphology");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Syntax");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate prev (4)
menu.prev();
expect(menu.shownItem(0).name()).toEqual("Lemma");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Morphology");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Part-of-Speech");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate prev (5)
menu.prev();
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Lemma");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Morphology");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate next (1)
menu.next();
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Lemma");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2).name()).toEqual("Morphology");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.element().childNodes[6]).toBe(undefined);
// Activate prev (6)
menu.prev();
// Activate prev (7)
menu.prev();
expect(menu.shownItem(0).name()).toEqual("Morphology");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Syntax");
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.element().childNodes[6]).toBe(undefined);
});
it('should be navigatable and filterable (prefix = "o")', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
menu._firstActive = true;
menu.limit(2);
expect(menu.prefix("o").show()).toBe(true);
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Morphology");
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>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Next (1)
menu.next();
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Morphology");
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>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2)).toBe(undefined);
// Next (2)
menu.next();
expect(menu.shownItem(0).name()).toEqual("Morphology");
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>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2)).toBe(undefined);
// Next (3) - to prefix
menu.next();
expect(menu.shownItem(0).name()).toEqual("Morphology");
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>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
menu.next();
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Morphology");
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>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
});
it('should be navigatable and filterable (prefix = "ex", "e")', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
menu._firstActive = true;
menu.limit(2);
expect(menu.prefix("ex").show()).toBe(true);
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Morphology");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Next (1)
menu.next();
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Morphology");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2)).toBe(undefined);
// Next (2)
menu.next();
expect(menu.prefix()).toEqual('ex');
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Morphology");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Reset limit
menu.limit(5);
// Change show
expect(menu.prefix("e").show()).toBe(true);
expect(menu._prefix.active()).toBe(false);
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Morphology");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Next (1)
menu.next();
expect(menu._prefix.active()).toBe(false);
expect(menu.prefix()).toEqual('e');
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Morphology");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2)).toBe(undefined);
// Next (2)
menu.next();
expect(menu._prefix.active()).toBe(true);
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Morphology");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Next (3)
menu.next();
expect(menu._prefix.active()).toBe(false);
expect(menu.shownItem(0).name()).toEqual("Constituency");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Morphology");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
});
it('should choose prefix with failing prefix', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
menu.limit(2);
expect(menu.prefix("exit").show()).toBe(true);
expect(menu.shownItem(0)).toBeUndefined();
expect(menu._prefix.active()).toBe(true);
});
it('should be navigatable with prefix', function () {
var menu = KorAP.HintMenu.create("cnx/", demolist);
menu._firstActive = true;
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("");
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
menu._prefix.add('a');
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("a");
expect(menu.shownItem(0).name()).toEqual("Autor");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
menu._prefix.add('u');
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("au");
expect(menu.shownItem(0).name()).toEqual("Autor");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong><mark>Au</mark>tor</strong>");
menu._prefix.chop();
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("a");
expect(menu.shownItem(0).name()).toEqual("Autor");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
menu._prefix.chop();
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("");
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
// Forward
menu._prefix.chop();
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("");
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
expect(menu.shownItem(2).active()).toBe(false);
// Forward
menu.next();
expect(menu.prefix()).toEqual("");
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
// Forward
menu.next();
expect(menu.prefix()).toEqual("");
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.shownItem(3)).toBe(undefined);
// Forward
menu.next();
expect(menu.prefix()).toEqual("");
expect(menu.shownItem(0).name()).toEqual("Untertitel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertitel</strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Veröffentlichungsdatum");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Länge");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Länge</strong>");
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.shownItem(3)).toBe(undefined);
// Forward
menu.next();
expect(menu.prefix()).toEqual("");
expect(menu.shownItem(0).name()).toEqual("Veröffentlichungsdatum");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Länge");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Länge</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Autor");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Autor</strong>");
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.shownItem(3)).toBe(undefined);
// Forward
menu.next();
expect(menu.prefix()).toEqual("");
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Titel</strong>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertitel</strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
expect(menu.shownItem(2).active()).toBe(false);
});
it('should be navigatable with a prefix (1)', function () {
var menu = KorAP.HintMenu.create("cnx/", demolist);
menu._firstActive = true;
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("");
// Add prefix in uppercase - but check in lowercase
menu.prefix('El');
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("El");
expect(menu._prefix.active()).toEqual(false);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Forward
menu.next();
expect(menu.prefix()).toEqual("El");
expect(menu._prefix.active()).toEqual(false);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2)).toBe(undefined);
// Forward
menu.next();
expect(menu.prefix()).toEqual("El");
expect(menu._prefix.active()).toEqual(true);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Backward
menu.prev();
expect(menu.prefix()).toEqual("El");
expect(menu._prefix.active()).toEqual(false);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2)).toBe(undefined);
});
it('should be navigatable with a prefix (2)', function () {
var menu = KorAP.HintMenu.create("cnx/", demolist);
menu._firstActive = true;
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("");
menu.prefix('el');
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("el");
expect(menu._prefix.active()).toEqual(false);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Backward
menu.prev();
expect(menu._prefix.active()).toEqual(true);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Backward
menu.prev();
expect(menu._prefix.active()).toEqual(false);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2)).toBe(undefined);
});
it('should be navigatable with a prefix (3)', function () {
var menu = KorAP.HintMenu.create("cnx/", demolist);
menu._firstActive = true;
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("");
menu.prefix('el');
expect(menu.show()).toBe(true);
expect(menu.prefix()).toEqual("el");
expect(menu._prefix.active()).toEqual(false);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Backward
menu.prev();
expect(menu._prefix.active()).toEqual(true);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
// Forward
menu.next();
expect(menu.prefix()).toEqual("el");
expect(menu._prefix.active()).toEqual(false);
expect(menu.shownItem(0).name()).toEqual("Titel");
expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).name()).toEqual("Untertitel");
expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2)).toBe(undefined);
});
it('should show screens by offset', function () {
var menu = KorAP.HintMenu.create('cnx/', demolist);
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
// Highlight the first entry
menu.next();
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
// Highlight the second entry
menu.next();
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
// Move to first screen
menu.screen(0);
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
// Move to second screen
menu.screen(1);
expect(menu.shownItem(0).lcField()).toEqual(' untertitel');
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
menu.screen(2);
expect(menu.shownItem(0).lcField()).toEqual(' veröffentlichungsdatum');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
menu.screen(1);
expect(menu.shownItem(0).lcField()).toEqual(' untertitel');
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
});
it('should show screens by offset when prefixed', function () {
var menu = KorAP.HintMenu.create('cnx/', demolist);
menu.limit(3);
expect(menu.prefix("e").show()).toBe(true);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(0).element().innerHTML).toEqual('<strong>Tit<mark>e</mark>l</strong>');
menu.screen(1);
expect(menu.shownItem(0).element().innerHTML).toEqual('<strong>Unt<mark>e</mark>rtit<mark>e</mark>l</strong>');
});
it('should be page downable', function () {
var menu = KorAP.OwnMenu.create(demolonglist);
menu.limit(3);
expect(menu.show(0)).toBe(true);
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
menu.pageDown();
expect(menu.shownItem(0).lcField()).toEqual(' länge');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
menu.pageDown();
expect(menu.shownItem(0).lcField()).toEqual(' corpusid');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
// Doesn't matter
menu.pageDown();
expect(menu.shownItem(0).lcField()).toEqual(' corpusid');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
});
it('should be page downable with prefix', function () {
var menu = KorAP.OwnMenu.create(demolonglist);
menu.limit(3);
expect(menu.prefix('e').show(0)).toBe(true);
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' veröffentlichungsdatum');
expect(menu.shownItem(3)).toBe(undefined);
menu.pageDown();
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' länge');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' genre');
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' textid');
// Doesn't matter
menu.pageDown();
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' länge');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' genre');
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' textid');
});
it('should be page upable', function () {
var menu = KorAP.OwnMenu.create(demolonglist);
menu.limit(3);
// Choose the final value
expect(menu.show(1000)).toBe(true);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.shownItem(2).lcField()).toEqual(' textid');
expect(menu.shownItem(3)).toBe(undefined);
menu.pageUp();
expect(menu.shownItem(0).lcField()).toEqual(' länge');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
menu.pageUp();
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
// Doesn't matter
menu.pageUp();
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
});
it('should be page upable with prefix', function () {
var menu = KorAP.OwnMenu.create(demolonglist);
menu.limit(3);
// Choose the final value
expect(menu.prefix("e").show(1000)).toBe(true);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' länge');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' genre');
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.shownItem(2).lcField()).toEqual(' textid');
expect(menu.shownItem(3)).toBe(undefined);
menu.pageUp();
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' veröffentlichungsdatum');
// Doesn't matter
menu.pageUp();
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' untertitel');
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' veröffentlichungsdatum');
});
it('should scroll to a chosen value', function () {
var menu = KorAP.OwnMenu.create(demolist);
menu.limit(3);
// Choose value 1
expect(menu.show(1)).toBe(true);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(3)).toBe(undefined);
// Choose value 2
expect(menu.show(2)).toBe(true);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' titel');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.shownItem(3)).toBe(undefined);
});
xit('should highlight a chosen value');
xit('should move the viewport to active, if active is not in the viewport');
});
describe('KorAP.Prefix', function () {
it('should be initializable', function () {
var p = prefixClass.create();
expect(p.element().classList.contains('pref')).toBeTruthy();
expect(p.isSet()).not.toBeTruthy();
/*
expect(mi.lcField()).toEqual(' baum');
*/
});
it('should be modifiable', function () {
var p = prefixClass.create();
expect(p.value()).toEqual('');
expect(p.element().firstChild).toBeNull();
// Set string
expect(p.value('Test')).toEqual('Test');
expect(p.value()).toEqual('Test');
expect(p.element().firstChild.nodeValue).toEqual('Test');
// Add string
expect(p.add('ified')).toEqual('Testified');
expect(p.value()).toEqual('Testified');
expect(p.element().firstChild.nodeValue).toEqual('Testified');
// Clear string
p.clear();
expect(p.value()).toEqual('');
expect(p.element().firstChild).toBeNull();
// Set string
expect(p.value('Test')).toEqual('Test');
expect(p.value()).toEqual('Test');
expect(p.element().firstChild.nodeValue).toEqual('Test');
expect(p.chop()).toEqual('Tes');
expect(p.value()).toEqual('Tes');
expect(p.element().firstChild.nodeValue).toEqual('Tes');
expect(p.chop()).toEqual('Te');
expect(p.value()).toEqual('Te');
expect(p.element().firstChild.nodeValue).toEqual('Te');
expect(p.chop()).toEqual('T');
expect(p.value()).toEqual('T');
expect(p.element().firstChild.nodeValue).toEqual('T');
expect(p.chop()).toEqual('');
expect(p.value()).toEqual('');
expect(p.element().firstChild).toBeNull();
});
it('should be activatable', function () {
var p = prefixClass.create();
expect(p.value()).toEqual('');
expect(p.element().firstChild).toBeNull();
expect(p.value('Test')).toEqual('Test');
expect(p.element().firstChild.nodeValue).toEqual('Test');
expect(p.active()).not.toBeTruthy();
expect(p.element().classList.contains('active')).not.toBeTruthy();
p.active(true);
expect(p.active()).toBeTruthy();
expect(p.element().classList.contains('active')).toBeTruthy();
});
});
describe('KorAP.LengthField', function () {
it('should be initializable', function () {
var l = lengthFieldClass.create();
expect(l.element().classList.contains('lengthField')).toBeTruthy();
expect(l.element().children.length).toEqual(0);
});
it('should be extensible', function () {
var l = lengthFieldClass.create();
l.add(['Baum']);
expect(l.element().children.length).toEqual(1);
expect(l.element().children[0].nodeName).toEqual('SPAN');
expect(l.element().children[0].textContent).toEqual('Baum--');
l.add(['Fragezeichen']);
expect(l.element().children.length).toEqual(2);
expect(l.element().children[1].nodeName).toEqual('SPAN');
expect(l.element().children[1].textContent).toEqual('Fragezeichen--');
});
it('should be correctly initializable', function () {
var list = [
["Constituency"],
["Lemma"],
["Morphology"],
["Part-of-Speech"],
["Syntax"]
];
var menu = KorAP.OwnMenu.create(list);
expect(menu.lengthField().element().children.length).toEqual(5);
});
});
describe('KorAP.Slider', function () {
it('should correctly be initializable', function () {
var list = [
["Constituency"],
["Lemma"],
["Morphology"],
["Part-of-Speech"],
["Syntax"]
];
var menu = KorAP.OwnMenu.create(list);
menu._firstActive = true;
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.slider().offset()).toEqual(0);
expect(menu.position).toEqual(0);
});
it('should correctly move on arrow keys', function () {
var list = [
["Constituency"],
["Lemma"],
["Morphology"],
["Part-of-Speech"],
["Syntax"]
];
var menu = KorAP.OwnMenu.create(list);
menu._firstActive = true;
menu.limit(3);
expect(menu.show()).toBe(true);
menu.next();
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.slider().offset()).toEqual(0);
expect(menu.position).toEqual(1);
menu.next();
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.slider().offset()).toEqual(0);
expect(menu.position).toEqual(2);
menu.next();
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.slider().offset()).toEqual(1);
expect(menu.position).toEqual(3);
menu.next();
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.slider().offset()).toEqual(2);
expect(menu.position).toEqual(4);
menu.next();
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.slider().offset()).toEqual(0);
expect(menu.position).toEqual(0);
expect(menu.slider()._slider.style.height).toEqual('60%');
});
it('should correctly move the list on mousemove', function () {
var list = [
["Constituency"],
["Lemma"],
["Morphology"],
["Part-of-Speech"],
["Syntax"]
];
var menu = KorAP.OwnMenu.create(list);
menu._firstActive = true;
menu.limit(3);
expect(menu.show()).toBe(true);
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.slider().offset()).toEqual(0);
// This will normally be done on
menu.slider()._rulerHeight = 100;
menu.slider()._sliderHeight = 40;
expect(menu.slider().length()).toEqual(5);
menu.slider().movetoRel(10);
expect(menu.slider().offset()).toEqual(0);
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(0).lcField()).toEqual(' constituency');
menu.slider().movetoRel(24);
expect(menu.slider().offset()).toEqual(0);
menu.slider().movetoRel(25);
expect(menu.slider().offset()).toEqual(0);
menu.slider().movetoRel(30);
expect(menu.slider().offset()).toEqual(1);
menu.slider().movetoRel(59);
expect(menu.slider().offset()).toEqual(1);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' lemma');
// Everything > 60 is offset 2
menu.slider().movetoRel(60);
expect(menu.slider().offset()).toEqual(2);
menu.slider().movetoRel(180);
expect(menu.slider().offset()).toEqual(2);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' morphology');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
// When the active cursor moves again - scroll to viewport
// cursor is before viewport
menu.next();
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(0).lcField()).toEqual(' lemma');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).active()).toBe(false);
menu.next();
menu.next();
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' lemma');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' morphology');
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.shownItem(2).lcField()).toEqual(' part-of-speech');
menu.slider().movetoRel(0);
expect(menu.slider().offset()).toEqual(0);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' constituency');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' lemma');
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' morphology');
// cursor is after viewport
menu.next();
expect(menu.slider().offset()).toEqual(2);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' morphology');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' part-of-speech');
expect(menu.shownItem(2).active()).toBe(true);
expect(menu.shownItem(2).lcField()).toEqual(' syntax');
menu.slider().movetoRel(0);
expect(menu.slider().offset()).toEqual(0);
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(0).lcField()).toEqual(' constituency');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' lemma');
expect(menu.shownItem(2).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' morphology');
menu.prev();
expect(menu.slider().offset()).toEqual(2);
expect(menu.shownItem(0).lcField()).toEqual(' morphology');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' part-of-speech');
expect(menu.shownItem(1).active()).toBe(true);
expect(menu.shownItem(2).lcField()).toEqual(' syntax');
expect(menu.shownItem(2).active()).toBe(false);
menu.prev();
menu.prev();
expect(menu.slider().offset()).toEqual(1);
expect(menu.shownItem(0).lcField()).toEqual(' lemma');
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).lcField()).toEqual(' morphology');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' part-of-speech');
expect(menu.shownItem(2).active()).toBe(false);
menu.slider().movetoRel(100);
expect(menu.slider().offset()).toEqual(2);
expect(menu.shownItem(0).lcField()).toEqual(' morphology');
expect(menu.shownItem(0).active()).toBe(false);
expect(menu.shownItem(1).lcField()).toEqual(' part-of-speech');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' syntax');
expect(menu.shownItem(2).active()).toBe(false);
menu.prev();
expect(menu.slider().offset()).toEqual(0);
expect(menu.shownItem(0).lcField()).toEqual(' constituency');
expect(menu.shownItem(0).active()).toBe(true);
expect(menu.shownItem(1).lcField()).toEqual(' lemma');
expect(menu.shownItem(1).active()).toBe(false);
expect(menu.shownItem(2).lcField()).toEqual(' morphology');
expect(menu.shownItem(2).active()).toBe(false);
});
});
});