@syncfusion/ej2-navigations 17.2.55-1205479 → 17.3.14-96615

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/.eslintrc.json +244 -0
  2. package/CHANGELOG.md +898 -786
  3. package/README.md +163 -163
  4. package/dist/ej2-navigations.umd.min.js +1 -10
  5. package/dist/ej2-navigations.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-navigations.es2015.js +512 -255
  7. package/dist/es6/ej2-navigations.es2015.js.map +1 -1
  8. package/dist/es6/ej2-navigations.es5.js +642 -385
  9. package/dist/es6/ej2-navigations.es5.js.map +1 -1
  10. package/dist/global/ej2-navigations.min.js +1 -10
  11. package/dist/global/ej2-navigations.min.js.map +1 -1
  12. package/dist/global/index.d.ts +0 -9
  13. package/dist/ts/accordion/accordion.ts +1312 -0
  14. package/dist/ts/common/h-scroll.ts +459 -0
  15. package/dist/ts/common/menu-base.ts +2131 -0
  16. package/dist/ts/common/v-scroll.ts +430 -0
  17. package/dist/ts/context-menu/context-menu.ts +119 -0
  18. package/dist/ts/menu/menu.ts +270 -0
  19. package/dist/ts/sidebar/sidebar.ts +817 -0
  20. package/dist/ts/tab/tab.ts +1761 -0
  21. package/dist/ts/toolbar/toolbar.ts +2076 -0
  22. package/dist/ts/treeview/treeview.ts +5050 -0
  23. package/helpers/e2e/index.js +3 -3
  24. package/license +10 -10
  25. package/package.json +135 -145
  26. package/src/accordion/accordion-model.d.ts +162 -143
  27. package/src/accordion/accordion.d.ts +35 -6
  28. package/src/accordion/accordion.js +193 -71
  29. package/src/common/h-scroll-model.d.ts +5 -5
  30. package/src/common/h-scroll.js +19 -20
  31. package/src/common/index.d.ts +1 -0
  32. package/src/common/index.js +1 -0
  33. package/src/common/menu-base-model.d.ts +157 -157
  34. package/src/common/menu-base.d.ts +19 -0
  35. package/src/common/menu-base.js +97 -24
  36. package/src/common/v-scroll-model.d.ts +5 -5
  37. package/src/common/v-scroll.js +19 -19
  38. package/src/context-menu/context-menu-model.d.ts +15 -15
  39. package/src/context-menu/context-menu.js +19 -19
  40. package/src/menu/menu-model.d.ts +30 -30
  41. package/src/menu/menu.js +19 -19
  42. package/src/sidebar/sidebar-model.d.ts +136 -136
  43. package/src/sidebar/sidebar.js +19 -19
  44. package/src/tab/tab-model.d.ts +215 -215
  45. package/src/tab/tab.d.ts +3 -0
  46. package/src/tab/tab.js +120 -83
  47. package/src/toolbar/toolbar-model.d.ts +175 -175
  48. package/src/toolbar/toolbar.d.ts +2 -1
  49. package/src/toolbar/toolbar.js +30 -24
  50. package/src/treeview/treeview-model.d.ts +323 -323
  51. package/src/treeview/treeview.d.ts +3 -1
  52. package/src/treeview/treeview.js +107 -87
  53. package/styles/accordion/_all.scss +2 -2
  54. package/styles/accordion/_bootstrap-dark-definition.scss +69 -69
  55. package/styles/accordion/_bootstrap-definition.scss +76 -76
  56. package/styles/accordion/_bootstrap4-definition.scss +82 -82
  57. package/styles/accordion/_fabric-dark-definition.scss +74 -74
  58. package/styles/accordion/_fabric-definition.scss +78 -78
  59. package/styles/accordion/_highcontrast-definition.scss +106 -106
  60. package/styles/accordion/_highcontrast-light-definition.scss +104 -104
  61. package/styles/accordion/_layout.scss +447 -447
  62. package/styles/accordion/_material-dark-definition.scss +75 -75
  63. package/styles/accordion/_material-definition.scss +72 -72
  64. package/styles/accordion/_theme.scss +479 -479
  65. package/styles/accordion/icons/_bootstrap-dark.scss +17 -17
  66. package/styles/accordion/icons/_bootstrap.scss +17 -17
  67. package/styles/accordion/icons/_bootstrap4.scss +17 -17
  68. package/styles/accordion/icons/_fabric-dark.scss +17 -17
  69. package/styles/accordion/icons/_fabric.scss +17 -17
  70. package/styles/accordion/icons/_highcontrast-light.scss +17 -17
  71. package/styles/accordion/icons/_highcontrast.scss +17 -17
  72. package/styles/accordion/icons/_material-dark.scss +17 -17
  73. package/styles/accordion/icons/_material.scss +17 -17
  74. package/styles/accordion/material-dark.css +2 -2
  75. package/styles/bootstrap-dark.css +10 -9
  76. package/styles/bootstrap.css +10 -9
  77. package/styles/bootstrap4.css +10 -9
  78. package/styles/bootstrap5-dark.css +0 -0
  79. package/styles/bootstrap5-dark.scss +0 -0
  80. package/styles/bootstrap5.css +0 -0
  81. package/styles/bootstrap5.scss +0 -0
  82. package/styles/context-menu/_all.scss +2 -2
  83. package/styles/context-menu/_bootstrap-dark-definition.scss +54 -54
  84. package/styles/context-menu/_bootstrap-definition.scss +52 -52
  85. package/styles/context-menu/_bootstrap4-definition.scss +52 -52
  86. package/styles/context-menu/_fabric-dark-definition.scss +54 -54
  87. package/styles/context-menu/_fabric-definition.scss +52 -52
  88. package/styles/context-menu/_highcontrast-definition.scss +52 -52
  89. package/styles/context-menu/_highcontrast-light-definition.scss +54 -54
  90. package/styles/context-menu/_layout-mixin.scss +175 -174
  91. package/styles/context-menu/_layout.scss +70 -70
  92. package/styles/context-menu/_material-dark-definition.scss +54 -54
  93. package/styles/context-menu/_material-definition.scss +52 -52
  94. package/styles/context-menu/_theme-mixin.scss +59 -59
  95. package/styles/context-menu/_theme.scss +36 -36
  96. package/styles/context-menu/bootstrap-dark.css +1 -1
  97. package/styles/context-menu/bootstrap.css +1 -1
  98. package/styles/context-menu/bootstrap4.css +1 -1
  99. package/styles/context-menu/fabric-dark.css +1 -1
  100. package/styles/context-menu/fabric.css +1 -1
  101. package/styles/context-menu/highcontrast-light.css +1 -1
  102. package/styles/context-menu/highcontrast.css +1 -1
  103. package/styles/context-menu/icons/_bootstrap-dark.scss +30 -30
  104. package/styles/context-menu/icons/_bootstrap.scss +30 -30
  105. package/styles/context-menu/icons/_bootstrap4.scss +30 -30
  106. package/styles/context-menu/icons/_fabric-dark.scss +30 -30
  107. package/styles/context-menu/icons/_fabric.scss +30 -30
  108. package/styles/context-menu/icons/_highcontrast-light.scss +30 -30
  109. package/styles/context-menu/icons/_highcontrast.scss +30 -30
  110. package/styles/context-menu/icons/_material-dark.scss +30 -30
  111. package/styles/context-menu/icons/_material.scss +30 -30
  112. package/styles/context-menu/material-dark.css +1 -1
  113. package/styles/context-menu/material.css +4 -4
  114. package/styles/fabric-dark.css +10 -9
  115. package/styles/fabric.css +10 -9
  116. package/styles/h-scroll/_all.scss +2 -2
  117. package/styles/h-scroll/_bootstrap-dark-definition.scss +49 -49
  118. package/styles/h-scroll/_bootstrap-definition.scss +50 -50
  119. package/styles/h-scroll/_bootstrap4-definition.scss +49 -49
  120. package/styles/h-scroll/_fabric-dark-definition.scss +50 -50
  121. package/styles/h-scroll/_fabric-definition.scss +48 -48
  122. package/styles/h-scroll/_highcontrast-definition.scss +52 -52
  123. package/styles/h-scroll/_highcontrast-light-definition.scss +54 -54
  124. package/styles/h-scroll/_layout.scss +198 -198
  125. package/styles/h-scroll/_material-dark-definition.scss +77 -77
  126. package/styles/h-scroll/_material-definition.scss +77 -77
  127. package/styles/h-scroll/_theme.scss +157 -157
  128. package/styles/h-scroll/icons/_bootstrap-dark.scss +49 -49
  129. package/styles/h-scroll/icons/_bootstrap.scss +49 -49
  130. package/styles/h-scroll/icons/_bootstrap4.scss +49 -49
  131. package/styles/h-scroll/icons/_fabric-dark.scss +49 -49
  132. package/styles/h-scroll/icons/_fabric.scss +49 -49
  133. package/styles/h-scroll/icons/_highcontrast-light.scss +49 -49
  134. package/styles/h-scroll/icons/_highcontrast.scss +49 -49
  135. package/styles/h-scroll/icons/_material-dark.scss +49 -49
  136. package/styles/h-scroll/icons/_material.scss +49 -49
  137. package/styles/highcontrast-light.css +10 -9
  138. package/styles/highcontrast.css +10 -9
  139. package/styles/material-dark.css +12 -11
  140. package/styles/material.css +24 -14
  141. package/styles/menu/_all.scss +2 -2
  142. package/styles/menu/_bootstrap-dark-definition.scss +63 -63
  143. package/styles/menu/_bootstrap-definition.scss +65 -65
  144. package/styles/menu/_bootstrap4-definition.scss +64 -64
  145. package/styles/menu/_fabric-dark-definition.scss +63 -63
  146. package/styles/menu/_fabric-definition.scss +64 -64
  147. package/styles/menu/_highcontrast-definition.scss +65 -65
  148. package/styles/menu/_highcontrast-light-definition.scss +61 -61
  149. package/styles/menu/_layout.scss +638 -637
  150. package/styles/menu/_material-dark-definition.scss +63 -63
  151. package/styles/menu/_material-definition.scss +64 -64
  152. package/styles/menu/_theme.scss +243 -243
  153. package/styles/menu/bootstrap-dark.css +2 -1
  154. package/styles/menu/bootstrap.css +2 -1
  155. package/styles/menu/bootstrap.scss +1 -0
  156. package/styles/menu/bootstrap4.css +2 -1
  157. package/styles/menu/fabric-dark.css +2 -1
  158. package/styles/menu/fabric.css +2 -1
  159. package/styles/menu/fabric.scss +1 -0
  160. package/styles/menu/highcontrast-light.css +2 -1
  161. package/styles/menu/highcontrast.css +2 -1
  162. package/styles/menu/highcontrast.scss +1 -0
  163. package/styles/menu/icons/_bootstrap-dark.scss +127 -127
  164. package/styles/menu/icons/_bootstrap.scss +127 -127
  165. package/styles/menu/icons/_bootstrap4.scss +127 -127
  166. package/styles/menu/icons/_fabric-dark.scss +127 -127
  167. package/styles/menu/icons/_fabric.scss +127 -127
  168. package/styles/menu/icons/_highcontrast-light.scss +127 -127
  169. package/styles/menu/icons/_highcontrast.scss +127 -127
  170. package/styles/menu/icons/_material-dark.scss +127 -127
  171. package/styles/menu/icons/_material.scss +127 -127
  172. package/styles/menu/material-dark.css +2 -1
  173. package/styles/menu/material.css +4 -3
  174. package/styles/menu/material.scss +1 -0
  175. package/styles/sidebar/_all.scss +3 -3
  176. package/styles/sidebar/_bootstrap-dark-definition.scss +4 -4
  177. package/styles/sidebar/_bootstrap-definition.scss +4 -4
  178. package/styles/sidebar/_bootstrap4-definition.scss +4 -4
  179. package/styles/sidebar/_fabric-dark-definition.scss +4 -4
  180. package/styles/sidebar/_fabric-definition.scss +6 -6
  181. package/styles/sidebar/_highcontrast-definition.scss +4 -4
  182. package/styles/sidebar/_highcontrast-light-definition.scss +4 -4
  183. package/styles/sidebar/_icons.scss +1 -1
  184. package/styles/sidebar/_material-dark-definition.scss +4 -4
  185. package/styles/sidebar/_material-definition.scss +6 -6
  186. package/styles/sidebar/_theme.scss +168 -168
  187. package/styles/sidebar/bootstrap-dark.css +0 -1
  188. package/styles/sidebar/bootstrap.css +0 -1
  189. package/styles/sidebar/bootstrap4.css +0 -1
  190. package/styles/sidebar/fabric-dark.css +0 -1
  191. package/styles/sidebar/fabric.css +0 -1
  192. package/styles/sidebar/highcontrast-light.css +0 -1
  193. package/styles/sidebar/highcontrast.css +0 -1
  194. package/styles/sidebar/material-dark.css +0 -1
  195. package/styles/sidebar/material.css +0 -1
  196. package/styles/tab/_all.scss +2 -2
  197. package/styles/tab/_bootstrap-dark-definition.scss +386 -386
  198. package/styles/tab/_bootstrap-definition.scss +396 -396
  199. package/styles/tab/_bootstrap4-definition.scss +401 -401
  200. package/styles/tab/_fabric-dark-definition.scss +394 -394
  201. package/styles/tab/_fabric-definition.scss +410 -410
  202. package/styles/tab/_highcontrast-definition.scss +434 -434
  203. package/styles/tab/_highcontrast-light-definition.scss +423 -423
  204. package/styles/tab/_icons.scss +43 -43
  205. package/styles/tab/_layout.scss +3528 -3521
  206. package/styles/tab/_material-dark-definition.scss +407 -407
  207. package/styles/tab/_material-definition.scss +416 -416
  208. package/styles/tab/_theme.scss +1751 -1751
  209. package/styles/tab/bootstrap-dark.css +7 -2
  210. package/styles/tab/bootstrap.css +7 -2
  211. package/styles/tab/bootstrap4.css +7 -2
  212. package/styles/tab/fabric-dark.css +7 -2
  213. package/styles/tab/fabric.css +7 -2
  214. package/styles/tab/highcontrast-light.css +7 -2
  215. package/styles/tab/highcontrast.css +7 -2
  216. package/styles/tab/icons/_bootstrap-dark.scss +132 -132
  217. package/styles/tab/icons/_bootstrap.scss +132 -132
  218. package/styles/tab/icons/_bootstrap4.scss +132 -132
  219. package/styles/tab/icons/_fabric-dark.scss +132 -132
  220. package/styles/tab/icons/_fabric.scss +132 -132
  221. package/styles/tab/icons/_highcontrast-light.scss +132 -132
  222. package/styles/tab/icons/_highcontrast.scss +132 -132
  223. package/styles/tab/icons/_material-dark.scss +132 -132
  224. package/styles/tab/icons/_material.scss +132 -132
  225. package/styles/tab/material-dark.css +7 -2
  226. package/styles/tab/material.css +7 -2
  227. package/styles/tailwind-dark.css +0 -0
  228. package/styles/tailwind-dark.scss +0 -0
  229. package/styles/tailwind.css +0 -0
  230. package/styles/tailwind.scss +0 -0
  231. package/styles/toolbar/_all.scss +2 -2
  232. package/styles/toolbar/_bootstrap-dark-definition.scss +135 -135
  233. package/styles/toolbar/_bootstrap-definition.scss +134 -134
  234. package/styles/toolbar/_bootstrap4-definition.scss +139 -139
  235. package/styles/toolbar/_fabric-dark-definition.scss +155 -155
  236. package/styles/toolbar/_fabric-definition.scss +139 -139
  237. package/styles/toolbar/_highcontrast-definition.scss +149 -149
  238. package/styles/toolbar/_highcontrast-light-definition.scss +164 -164
  239. package/styles/toolbar/_layout.scss +1460 -1460
  240. package/styles/toolbar/_material-dark-definition.scss +180 -180
  241. package/styles/toolbar/_material-definition.scss +164 -164
  242. package/styles/toolbar/_theme.scss +451 -451
  243. package/styles/toolbar/bootstrap-dark.css +0 -1
  244. package/styles/toolbar/bootstrap.css +0 -1
  245. package/styles/toolbar/bootstrap.scss +1 -0
  246. package/styles/toolbar/bootstrap4.css +0 -1
  247. package/styles/toolbar/fabric-dark.css +0 -1
  248. package/styles/toolbar/fabric.css +0 -1
  249. package/styles/toolbar/fabric.scss +1 -0
  250. package/styles/toolbar/highcontrast-light.css +0 -1
  251. package/styles/toolbar/highcontrast.css +0 -1
  252. package/styles/toolbar/highcontrast.scss +1 -0
  253. package/styles/toolbar/icons/_bootstrap-dark.scss +16 -16
  254. package/styles/toolbar/icons/_bootstrap.scss +16 -16
  255. package/styles/toolbar/icons/_bootstrap4.scss +16 -16
  256. package/styles/toolbar/icons/_fabric-dark.scss +16 -16
  257. package/styles/toolbar/icons/_fabric.scss +16 -16
  258. package/styles/toolbar/icons/_highcontrast-light.scss +16 -16
  259. package/styles/toolbar/icons/_highcontrast.scss +16 -16
  260. package/styles/toolbar/icons/_material-dark.scss +16 -16
  261. package/styles/toolbar/icons/_material.scss +16 -16
  262. package/styles/toolbar/material-dark.css +0 -1
  263. package/styles/toolbar/material.css +0 -1
  264. package/styles/toolbar/material.scss +1 -0
  265. package/styles/treeview/_all.scss +2 -2
  266. package/styles/treeview/_bootstrap-dark-definition.scss +131 -131
  267. package/styles/treeview/_bootstrap-definition.scss +127 -127
  268. package/styles/treeview/_bootstrap4-definition.scss +153 -153
  269. package/styles/treeview/_fabric-dark-definition.scss +130 -130
  270. package/styles/treeview/_fabric-definition.scss +126 -126
  271. package/styles/treeview/_highcontrast-definition.scss +132 -132
  272. package/styles/treeview/_highcontrast-light-definition.scss +137 -137
  273. package/styles/treeview/_layout.scss +551 -551
  274. package/styles/treeview/_material-dark-definition.scss +126 -126
  275. package/styles/treeview/_material-definition.scss +126 -126
  276. package/styles/treeview/_theme.scss +331 -331
  277. package/styles/treeview/bootstrap-dark.css +0 -3
  278. package/styles/treeview/bootstrap.css +0 -3
  279. package/styles/treeview/bootstrap4.css +0 -3
  280. package/styles/treeview/fabric-dark.css +0 -3
  281. package/styles/treeview/fabric.css +0 -3
  282. package/styles/treeview/highcontrast-light.css +0 -3
  283. package/styles/treeview/highcontrast.css +0 -3
  284. package/styles/treeview/icons/_bootstrap-dark.scss +39 -39
  285. package/styles/treeview/icons/_bootstrap.scss +39 -39
  286. package/styles/treeview/icons/_bootstrap4.scss +39 -39
  287. package/styles/treeview/icons/_fabric-dark.scss +43 -43
  288. package/styles/treeview/icons/_fabric.scss +43 -43
  289. package/styles/treeview/icons/_highcontrast-light.scss +43 -43
  290. package/styles/treeview/icons/_highcontrast.scss +43 -43
  291. package/styles/treeview/icons/_material-dark.scss +43 -43
  292. package/styles/treeview/icons/_material.scss +43 -43
  293. package/styles/treeview/material-dark.css +0 -3
  294. package/styles/treeview/material.css +9 -3
  295. package/styles/v-scroll/_all.scss +2 -2
  296. package/styles/v-scroll/_bootstrap-dark-definition.scss +50 -50
  297. package/styles/v-scroll/_bootstrap-definition.scss +49 -49
  298. package/styles/v-scroll/_bootstrap4-definition.scss +49 -49
  299. package/styles/v-scroll/_fabric-dark-definition.scss +51 -51
  300. package/styles/v-scroll/_fabric-definition.scss +50 -50
  301. package/styles/v-scroll/_highcontrast-definition.scss +51 -51
  302. package/styles/v-scroll/_highcontrast-light-definition.scss +52 -52
  303. package/styles/v-scroll/_layout.scss +162 -162
  304. package/styles/v-scroll/_material-dark-definition.scss +78 -78
  305. package/styles/v-scroll/_material-definition.scss +77 -77
  306. package/styles/v-scroll/_theme.scss +133 -133
  307. package/styles/v-scroll/icons/_bootstrap-dark.scss +26 -26
  308. package/styles/v-scroll/icons/_bootstrap.scss +26 -26
  309. package/styles/v-scroll/icons/_bootstrap4.scss +26 -26
  310. package/styles/v-scroll/icons/_fabric-dark.scss +26 -26
  311. package/styles/v-scroll/icons/_fabric.scss +26 -26
  312. package/styles/v-scroll/icons/_highcontrast-light.scss +26 -26
  313. package/styles/v-scroll/icons/_highcontrast.scss +26 -26
  314. package/styles/v-scroll/icons/_material-dark.scss +26 -26
  315. package/styles/v-scroll/icons/_material.scss +26 -26
  316. package/tslint.json +111 -0
@@ -0,0 +1,270 @@
1
+ /// <reference path='../common/menu-base-model.d.ts'/>
2
+ import { attributes, NotifyPropertyChanges, INotifyPropertyChanged, Property } from '@syncfusion/ej2-base';
3
+ import { Browser, Complex, getUniqueID } from '@syncfusion/ej2-base';
4
+ import { MenuBase, FieldSettings } from '../common/menu-base';
5
+ import { MenuItemModel, FieldSettingsModel } from '../common/menu-base-model';
6
+ import { MenuModel } from './menu-model';
7
+
8
+ const VMENU: string = 'e-vertical';
9
+
10
+ const SCROLLABLE: string = 'e-scrollable';
11
+
12
+ const HAMBURGER: string = 'e-hamburger';
13
+
14
+ /**
15
+ * Specifies the option for orientation mode of Menu. By default, component rendered in Horizontal orientation mode.
16
+ */
17
+ export type Orientation = 'Horizontal' | 'Vertical';
18
+
19
+ type objColl = { [key: string]: Object }[];
20
+ type obj = { [key: string]: Object };
21
+
22
+ /**
23
+ * The Menu is a graphical user interface that serve as navigation headers for your application or site.
24
+ * ```html
25
+ * <ul id = 'menu'></ul>
26
+ * ```
27
+ * ```typescript
28
+ * <script>
29
+ * var menuObj = new Menu({ items: [{ text: 'Home' }, { text: 'Contact Us' },{ text: 'Login' }]});
30
+ * menuObj.appendTo("#menu");
31
+ * </script>
32
+ * ```
33
+ */
34
+ @NotifyPropertyChanges
35
+ export class Menu extends MenuBase implements INotifyPropertyChanged {
36
+ private tempItems: objColl = [];
37
+
38
+ /**
39
+ * Specified the orientation of Menu whether it can be horizontal or vertical.
40
+ * @default 'Horizontal'
41
+ */
42
+ @Property('Horizontal')
43
+ public orientation: Orientation;
44
+
45
+ /**
46
+ * Specifies target element to open/close Menu while click in Hamburger mode.
47
+ * @default ''
48
+ */
49
+ @Property('')
50
+ public target: string;
51
+
52
+ /**
53
+ * Specifies the template for Menu item.
54
+ * @default null
55
+ */
56
+ @Property(null)
57
+ public template: string;
58
+
59
+ /**
60
+ * Specifies whether to enable / disable the scrollable option in Menu.
61
+ * @default false
62
+ */
63
+ @Property(false)
64
+ public enableScrolling: boolean;
65
+
66
+ /**
67
+ * Specifies whether to enable / disable the hamburger mode in Menu.
68
+ * @default false
69
+ */
70
+ @Property(false)
71
+ public hamburgerMode: boolean;
72
+
73
+ /**
74
+ * Specifies the title text for hamburger mode in Menu.
75
+ * @default 'Menu'
76
+ */
77
+ @Property('Menu')
78
+ public title: string;
79
+
80
+ /**
81
+ * Specifies mapping fields from the dataSource.
82
+ * @default { itemId: "id", text: "text", parentId: "parentId", iconCss: "iconCss", url: "url", separator: "separator",
83
+ * children: "items" }
84
+ */
85
+ @Complex<FieldSettingsModel>({}, FieldSettings)
86
+ public fields: FieldSettingsModel;
87
+
88
+ /**
89
+ * Constructor for creating the component.
90
+ * @private
91
+ */
92
+ constructor(options?: MenuModel, element?: string | HTMLUListElement) {
93
+ super(options, <HTMLUListElement | string>element);
94
+ }
95
+
96
+ /**
97
+ * Get module name.
98
+ * @returns string
99
+ * @private
100
+ */
101
+ protected getModuleName(): string {
102
+ return 'menu';
103
+ }
104
+
105
+ /**
106
+ * For internal use only - prerender processing.
107
+ * @private
108
+ */
109
+ protected preRender(): void {
110
+ this.isMenu = true;
111
+ this.element.id = this.element.id || getUniqueID('ej2-menu');
112
+ if (this.template) {
113
+ try {
114
+ if (document.querySelectorAll(this.template).length) {
115
+ this.template = document.querySelector(this.template).innerHTML.trim();
116
+ this.clearChanges();
117
+ }
118
+ } catch (e) {
119
+ /* action on catch */
120
+ }
121
+ } else {
122
+ this.updateMenuItems(this.items);
123
+ }
124
+ super.preRender();
125
+ }
126
+
127
+ protected initialize(): void {
128
+ super.initialize();
129
+ attributes(this.element, <{ [key: string]: string }>{ 'role': 'menubar', 'tabindex': '0' });
130
+ if (this.orientation === 'Vertical') {
131
+ this.element.classList.add(VMENU);
132
+ if (this.hamburgerMode && !this.target) {
133
+ this.element.previousElementSibling.classList.add(VMENU);
134
+ }
135
+ this.element.setAttribute('aria-orientation', 'vertical');
136
+ } else {
137
+ if (Browser.isDevice && !this.enableScrolling) {
138
+ this.element.parentElement.classList.add(SCROLLABLE);
139
+ }
140
+ }
141
+ if (this.hamburgerMode) {
142
+ this.element.parentElement.classList.add(HAMBURGER);
143
+ if (this.orientation === 'Horizontal') {
144
+ this.element.classList.add('e-hide-menu');
145
+ }
146
+ }
147
+ }
148
+
149
+ private updateMenuItems(items: MenuItemModel[]): void {
150
+ this.tempItems = items as objColl;
151
+ this.items = [];
152
+ this.tempItems.map(this.createMenuItems, this);
153
+ this.setProperties({ items: this.items }, true);
154
+ this.tempItems = [];
155
+ }
156
+
157
+ /**
158
+ * Called internally if any of the property value changed
159
+ * @private
160
+ * @param {MenuModel} newProp
161
+ * @param {MenuModel} oldProp
162
+ * @returns void
163
+ */
164
+ public onPropertyChanged(newProp: MenuModel, oldProp: MenuModel): void {
165
+ for (let prop of Object.keys(newProp)) {
166
+ switch (prop) {
167
+ case 'orientation':
168
+ if (newProp.orientation === 'Vertical') {
169
+ this.element.classList.add(VMENU);
170
+ if (this.hamburgerMode) {
171
+ if (!this.target) { this.element.previousElementSibling.classList.add(VMENU); }
172
+ this.element.classList.remove('e-hide-menu');
173
+ }
174
+ this.element.setAttribute('aria-orientation', 'vertical');
175
+ } else {
176
+ this.element.classList.remove(VMENU);
177
+ if (this.hamburgerMode) {
178
+ if (!this.target) { this.element.previousElementSibling.classList.remove(VMENU); }
179
+ this.element.classList.add('e-hide-menu');
180
+ }
181
+ this.element.removeAttribute('aria-orientation');
182
+ }
183
+ break;
184
+ case 'items':
185
+ if (!Object.keys(oldProp.items).length) { this.updateMenuItems(newProp.items); }
186
+ break;
187
+ case 'hamburgerMode':
188
+ if (!this.element.previousElementSibling) {
189
+ super.createHeaderContainer();
190
+ }
191
+ if (newProp.hamburgerMode) {
192
+ this.element.parentElement.classList.add(HAMBURGER);
193
+ } else {
194
+ this.element.parentElement.classList.remove(HAMBURGER);
195
+ }
196
+ if (this.orientation === 'Vertical') {
197
+ if (!this.target) { this.element.previousElementSibling.classList.add(VMENU); }
198
+ this.element.classList.remove('e-hide-menu');
199
+ } else {
200
+ if (this.target) {
201
+ this.element.previousElementSibling.classList.add(VMENU);
202
+ } else {
203
+ this.element.previousElementSibling.classList.remove(VMENU);
204
+ }
205
+ this.element.classList[newProp.hamburgerMode ? 'add' : 'remove']('e-hide-menu');
206
+ }
207
+ break;
208
+ case 'title':
209
+ if (this.hamburgerMode && this.element.previousElementSibling) {
210
+ this.element.previousElementSibling.querySelector('.e-menu-title').innerHTML = newProp.title;
211
+ }
212
+ break;
213
+ case 'target':
214
+ if (this.hamburgerMode) {
215
+ this.unWireEvents(oldProp.target);
216
+ this.wireEvents();
217
+ if (this.orientation === 'Horizontal') {
218
+ if (!newProp.target) {
219
+ if (!this.element.previousElementSibling) {
220
+ super.createHeaderContainer();
221
+ }
222
+ this.element.previousElementSibling.classList.remove(VMENU);
223
+ } else {
224
+ this.element.previousElementSibling.classList.add(VMENU);
225
+ }
226
+ this.element.classList.add('e-hide-menu');
227
+ }
228
+ }
229
+ break;
230
+ }
231
+ }
232
+ super.onPropertyChanged(newProp, oldProp);
233
+ }
234
+
235
+ private createMenuItems(item: obj): void {
236
+ let pIdField: string;
237
+ let idx: number[];
238
+ let i: number;
239
+ let items: MenuItemModel[] = this.items as objColl;
240
+ pIdField = this.getField('parentId');
241
+ if (item[pIdField]) {
242
+ idx = this.getIndex(item[pIdField].toString(), true);
243
+ for (i = 0; i < idx.length; i++) {
244
+ if (!items[idx[i]].items) {
245
+ items[idx[i]].items = [];
246
+ }
247
+ items = items[idx[i]].items;
248
+ }
249
+ items.push(item);
250
+ } else {
251
+ (<MenuItemModel[]>this.items).push(item);
252
+ }
253
+ }
254
+
255
+ /**
256
+ * This method is used to open the Menu in hamburger mode.
257
+ * @method open
258
+ * @returns void
259
+ */
260
+ public open(): void {
261
+ super.openHamburgerMenu();
262
+ }
263
+
264
+ /**
265
+ * Closes the Menu if it is opened in hamburger mode.
266
+ */
267
+ public close(): void {
268
+ super.closeHamburgerMenu();
269
+ }
270
+ }