blob: 3747a72167ad235edc120a8412823ef405cd3c72 [file] [log] [blame]
Nils Diewald0e6992a2015-04-14 20:13:52 +00001/**
2 * Hint menu item based on MenuItem
3 */
4define(['menu/item'], function (itemClass) {
5 return {
Nils Diewald7148c6f2015-05-04 15:07:53 +00006
7 /**
8 * Create new menu item object.
9 */
Nils Diewald0e6992a2015-04-14 20:13:52 +000010 create : function (params) {
11 return Object.create(itemClass)
12 .upgradeTo(this)
13 ._init(params);
14 },
Nils Diewald47f366b2015-04-15 20:06:35 +000015
Nils Diewald7148c6f2015-05-04 15:07:53 +000016 // Initialize menu item object
Nils Diewald0e6992a2015-04-14 20:13:52 +000017 _init : function (params) {
18 if (params[0] === undefined ||
19 params[1] === undefined)
20 throw new Error("Missing parameters");
21
22 this._name = params[0];
23 this._action = params[1];
24 this._lcField = ' ' + this._name.toLowerCase();
Akron71b91e42016-06-01 22:12:43 +020025
26 console.log('!!!!');
Nils Diewald0e6992a2015-04-14 20:13:52 +000027
28 if (params.length > 2) {
29 this._desc = params[2];
30 this._lcField += " " + this._desc.toLowerCase();
31 };
32
33 return this;
34 },
35
Nils Diewald7148c6f2015-05-04 15:07:53 +000036 /**
37 * Get or set the content of the item.
38 */
Nils Diewald0e6992a2015-04-14 20:13:52 +000039 content : function (content) {
40 if (arguments.length === 1) {
41 this._content = content;
42 };
43 return this._content;
44 },
Nils Diewald7148c6f2015-05-04 15:07:53 +000045
46 /**
47 * Override the click action
48 * of the menu item.
49 */
Nils Diewald47f366b2015-04-15 20:06:35 +000050 onclick : function (e) {
Nils Diewald0e6992a2015-04-14 20:13:52 +000051 var m = this.menu();
52 var h = m.hint();
53 m.hide();
54
55 // Update input field
56 var input = h.inputField();
Akron308db382016-05-30 22:34:07 +020057 input.insert(this._action).update();
Nils Diewald0e6992a2015-04-14 20:13:52 +000058
Nils Diewald47f366b2015-04-15 20:06:35 +000059 e.halt();
60
Nils Diewald0e6992a2015-04-14 20:13:52 +000061 h.show(true);
62 },
Nils Diewald47f366b2015-04-15 20:06:35 +000063
Nils Diewald7148c6f2015-05-04 15:07:53 +000064 /**
65 * The name of the menu entry.
66 */
Nils Diewald0e6992a2015-04-14 20:13:52 +000067 name : function () {
68 return this._name;
69 },
Nils Diewald7148c6f2015-05-04 15:07:53 +000070
71 /**
72 * The action (the string inserted on click)
73 * of the menu item.
74 */
Nils Diewald0e6992a2015-04-14 20:13:52 +000075 action : function () {
76 return this._action;
77 },
Nils Diewald7148c6f2015-05-04 15:07:53 +000078
79 /**
80 * The description of the menu item.
81 */
Nils Diewald0e6992a2015-04-14 20:13:52 +000082 desc : function () {
83 return this._desc;
84 },
Nils Diewald7148c6f2015-05-04 15:07:53 +000085
86 /**
87 * The associated dom element of the
88 * menu item.
89 */
Nils Diewald0e6992a2015-04-14 20:13:52 +000090 element : function () {
91 // already defined
92 if (this._element !== undefined)
93 return this._element;
94
95 // Create list item
96 var li = document.createElement("li");
97
98 if (this.onclick !== undefined) {
99 li["onclick"] = this.onclick.bind(this);
100 };
101
102 // Create title
103 var name = document.createElement("span");
104 name.appendChild(document.createTextNode(this._name));
105
106 li.appendChild(name);
107
108 // Create description
109 if (this._desc !== undefined) {
110 var desc = document.createElement("span");
111 desc.classList.add('desc');
112 desc.appendChild(document.createTextNode(this._desc));
113 li.appendChild(desc);
114 };
115 return this._element = li;
116 }
117 };
118});