@syncfusion/ej2-filemanager 29.2.4 → 30.1.37

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 (163) hide show
  1. package/.eslintrc.json +2 -0
  2. package/dist/ej2-filemanager.min.js +2 -2
  3. package/dist/ej2-filemanager.umd.min.js +2 -2
  4. package/dist/ej2-filemanager.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-filemanager.es2015.js +181 -20
  6. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  7. package/dist/es6/ej2-filemanager.es5.js +182 -20
  8. package/dist/es6/ej2-filemanager.es5.js.map +1 -1
  9. package/dist/global/ej2-filemanager.min.js +2 -2
  10. package/dist/global/ej2-filemanager.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/dist/ts/file-manager/actions/breadcrumb-bar.d.ts +60 -0
  13. package/dist/ts/file-manager/actions/breadcrumb-bar.ts +423 -0
  14. package/dist/ts/file-manager/actions/index.d.ts +6 -0
  15. package/dist/ts/file-manager/actions/index.ts +6 -0
  16. package/dist/ts/file-manager/actions/toolbar.d.ts +54 -0
  17. package/dist/ts/file-manager/actions/toolbar.ts +609 -0
  18. package/dist/ts/file-manager/actions/virtualization.d.ts +93 -0
  19. package/dist/ts/file-manager/actions/virtualization.ts +324 -0
  20. package/dist/ts/file-manager/base/classes.d.ts +224 -0
  21. package/dist/ts/file-manager/base/classes.ts +225 -0
  22. package/dist/ts/file-manager/base/constant.d.ts +136 -0
  23. package/dist/ts/file-manager/base/constant.ts +137 -0
  24. package/dist/ts/file-manager/base/file-manager-model.d.ts +520 -0
  25. package/dist/ts/file-manager/base/file-manager.d.ts +867 -0
  26. package/dist/ts/file-manager/base/file-manager.ts +2061 -0
  27. package/dist/ts/file-manager/base/index.d.ts +8 -0
  28. package/dist/ts/file-manager/base/index.ts +8 -0
  29. package/dist/ts/file-manager/base/interface.d.ts +952 -0
  30. package/dist/ts/file-manager/base/interface.ts +931 -0
  31. package/dist/ts/file-manager/common/index.d.ts +5 -0
  32. package/dist/ts/file-manager/common/index.ts +5 -0
  33. package/dist/ts/file-manager/common/operations.d.ts +122 -0
  34. package/dist/ts/file-manager/common/operations.ts +1369 -0
  35. package/dist/ts/file-manager/common/utility.d.ts +644 -0
  36. package/dist/ts/file-manager/common/utility.ts +1728 -0
  37. package/dist/ts/file-manager/index.d.ts +9 -0
  38. package/dist/ts/file-manager/index.ts +9 -0
  39. package/dist/ts/file-manager/layout/details-view.d.ts +152 -0
  40. package/dist/ts/file-manager/layout/details-view.ts +1990 -0
  41. package/dist/ts/file-manager/layout/index.d.ts +6 -0
  42. package/dist/ts/file-manager/layout/index.ts +6 -0
  43. package/dist/ts/file-manager/layout/large-icons-view.d.ts +157 -0
  44. package/dist/ts/file-manager/layout/large-icons-view.ts +1684 -0
  45. package/dist/ts/file-manager/layout/navigation-pane.d.ts +104 -0
  46. package/dist/ts/file-manager/layout/navigation-pane.ts +919 -0
  47. package/dist/ts/file-manager/models/ajax-settings-model.d.ts +36 -0
  48. package/dist/ts/file-manager/models/ajax-settings.d.ts +30 -0
  49. package/dist/ts/file-manager/models/ajax-settings.ts +39 -0
  50. package/dist/ts/file-manager/models/column-model.d.ts +155 -0
  51. package/dist/ts/file-manager/models/column.d.ts +179 -0
  52. package/dist/ts/file-manager/models/column.ts +216 -0
  53. package/dist/ts/file-manager/models/contextMenu-settings-model.d.ts +36 -0
  54. package/dist/ts/file-manager/models/contextMenu-settings.d.ts +33 -0
  55. package/dist/ts/file-manager/models/contextMenu-settings.ts +44 -0
  56. package/dist/ts/file-manager/models/default-locale.d.ts +4 -0
  57. package/dist/ts/file-manager/models/default-locale.ts +101 -0
  58. package/dist/ts/file-manager/models/details-view-settings-model.d.ts +30 -0
  59. package/dist/ts/file-manager/models/details-view-settings.d.ts +31 -0
  60. package/dist/ts/file-manager/models/details-view-settings.ts +54 -0
  61. package/dist/ts/file-manager/models/index.d.ts +19 -0
  62. package/dist/ts/file-manager/models/index.ts +19 -0
  63. package/dist/ts/file-manager/models/navigation-pane-settings-model.d.ts +40 -0
  64. package/dist/ts/file-manager/models/navigation-pane-settings.d.ts +34 -0
  65. package/dist/ts/file-manager/models/navigation-pane-settings.ts +42 -0
  66. package/dist/ts/file-manager/models/search-settings-model.d.ts +42 -0
  67. package/dist/ts/file-manager/models/search-settings.d.ts +44 -0
  68. package/dist/ts/file-manager/models/search-settings.ts +53 -0
  69. package/dist/ts/file-manager/models/toolbar-settings-model.d.ts +197 -0
  70. package/dist/ts/file-manager/models/toolbar-settings.d.ts +174 -0
  71. package/dist/ts/file-manager/models/toolbar-settings.ts +198 -0
  72. package/dist/ts/file-manager/models/upload-settings-model.d.ts +70 -0
  73. package/dist/ts/file-manager/models/upload-settings.d.ts +61 -0
  74. package/dist/ts/file-manager/models/upload-settings.ts +75 -0
  75. package/dist/ts/file-manager/pop-up/context-menu.d.ts +64 -0
  76. package/dist/ts/file-manager/pop-up/context-menu.ts +693 -0
  77. package/dist/ts/file-manager/pop-up/dialog.d.ts +31 -0
  78. package/dist/ts/file-manager/pop-up/dialog.ts +1009 -0
  79. package/dist/ts/file-manager/pop-up/index.d.ts +5 -0
  80. package/dist/ts/file-manager/pop-up/index.ts +5 -0
  81. package/dist/ts/index.d.ts +4 -0
  82. package/dist/ts/index.ts +4 -0
  83. package/package.json +16 -17
  84. package/src/file-manager/base/interface.d.ts +10 -0
  85. package/src/file-manager/common/operations.d.ts +18 -1
  86. package/src/file-manager/common/operations.js +59 -0
  87. package/src/file-manager/common/utility.d.ts +3 -3
  88. package/src/file-manager/common/utility.js +20 -6
  89. package/src/file-manager/layout/details-view.js +4 -3
  90. package/src/file-manager/layout/large-icons-view.d.ts +3 -0
  91. package/src/file-manager/layout/large-icons-view.js +67 -9
  92. package/src/file-manager/layout/navigation-pane.js +2 -0
  93. package/src/file-manager/pop-up/dialog.d.ts +3 -3
  94. package/src/file-manager/pop-up/dialog.js +34 -6
  95. package/styles/bds-lite.css +51 -1
  96. package/styles/bds.css +51 -1
  97. package/styles/bootstrap-dark-lite.css +51 -0
  98. package/styles/bootstrap-dark.css +51 -0
  99. package/styles/bootstrap-lite.css +51 -0
  100. package/styles/bootstrap.css +51 -0
  101. package/styles/bootstrap4-lite.css +51 -0
  102. package/styles/bootstrap4.css +51 -0
  103. package/styles/bootstrap5-dark-lite.css +51 -1
  104. package/styles/bootstrap5-dark.css +51 -1
  105. package/styles/bootstrap5-lite.css +51 -1
  106. package/styles/bootstrap5.3-lite.css +51 -0
  107. package/styles/bootstrap5.3.css +51 -0
  108. package/styles/bootstrap5.css +51 -1
  109. package/styles/fabric-dark-lite.css +51 -0
  110. package/styles/fabric-dark.css +51 -0
  111. package/styles/fabric-lite.css +51 -0
  112. package/styles/fabric.css +51 -0
  113. package/styles/file-manager/_bds-definition.scss +1 -0
  114. package/styles/file-manager/_bootstrap5-definition.scss +1 -0
  115. package/styles/file-manager/_layout.scss +46 -4
  116. package/styles/file-manager/_material3-definition.scss +2 -2
  117. package/styles/file-manager/_tailwind-definition.scss +1 -0
  118. package/styles/file-manager/_tailwind3-definition.scss +1 -0
  119. package/styles/file-manager/bds.css +51 -1
  120. package/styles/file-manager/bootstrap-dark.css +51 -0
  121. package/styles/file-manager/bootstrap.css +51 -0
  122. package/styles/file-manager/bootstrap4.css +51 -0
  123. package/styles/file-manager/bootstrap5-dark.css +51 -1
  124. package/styles/file-manager/bootstrap5.3.css +51 -0
  125. package/styles/file-manager/bootstrap5.css +51 -1
  126. package/styles/file-manager/fabric-dark.css +51 -0
  127. package/styles/file-manager/fabric.css +51 -0
  128. package/styles/file-manager/fluent-dark.css +51 -0
  129. package/styles/file-manager/fluent.css +51 -0
  130. package/styles/file-manager/fluent2.css +51 -0
  131. package/styles/file-manager/highcontrast-light.css +51 -0
  132. package/styles/file-manager/highcontrast.css +51 -0
  133. package/styles/file-manager/material-dark.css +51 -0
  134. package/styles/file-manager/material.css +51 -0
  135. package/styles/file-manager/material3-dark.css +53 -2
  136. package/styles/file-manager/material3.css +53 -2
  137. package/styles/file-manager/tailwind-dark.css +51 -1
  138. package/styles/file-manager/tailwind.css +51 -1
  139. package/styles/file-manager/tailwind3.css +51 -0
  140. package/styles/fluent-dark-lite.css +51 -0
  141. package/styles/fluent-dark.css +51 -0
  142. package/styles/fluent-lite.css +51 -0
  143. package/styles/fluent.css +51 -0
  144. package/styles/fluent2-lite.css +51 -0
  145. package/styles/fluent2.css +51 -0
  146. package/styles/highcontrast-light-lite.css +51 -0
  147. package/styles/highcontrast-light.css +51 -0
  148. package/styles/highcontrast-lite.css +51 -0
  149. package/styles/highcontrast.css +51 -0
  150. package/styles/material-dark-lite.css +51 -0
  151. package/styles/material-dark.css +51 -0
  152. package/styles/material-lite.css +51 -0
  153. package/styles/material.css +51 -0
  154. package/styles/material3-dark-lite.css +51 -0
  155. package/styles/material3-dark.css +53 -2
  156. package/styles/material3-lite.css +51 -0
  157. package/styles/material3.css +53 -2
  158. package/styles/tailwind-dark-lite.css +51 -1
  159. package/styles/tailwind-dark.css +51 -1
  160. package/styles/tailwind-lite.css +51 -1
  161. package/styles/tailwind.css +51 -1
  162. package/styles/tailwind3-lite.css +51 -0
  163. package/styles/tailwind3.css +51 -0
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 29.2.4
3
+ * version : 30.1.37
4
4
  * Copyright Syncfusion Inc. 2001 - 2024. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
@@ -0,0 +1,60 @@
1
+ import { TextBox } from '@syncfusion/ej2-inputs';
2
+ import { IFileManager } from '../base/interface';
3
+ /**
4
+ * BreadCrumbBar module
5
+ */
6
+ export declare class BreadCrumbBar {
7
+ private parent;
8
+ addressPath: string;
9
+ addressBarLink: string;
10
+ searchObj: TextBox;
11
+ private subMenuObj;
12
+ private keyboardModule;
13
+ private searchTimer;
14
+ private keyConfigs;
15
+ private searchWrapWidth;
16
+ /**
17
+ * constructor for addressbar module
18
+ *
19
+ * @hidden
20
+ * @param {IFileManager} parent - specifies parent element.
21
+ * @private
22
+ *
23
+ */
24
+ constructor(parent?: IFileManager);
25
+ private onPropertyChanged;
26
+ private render;
27
+ onPathChange(): void;
28
+ private updateBreadCrumbBar;
29
+ private onFocus;
30
+ private onKeyUp;
31
+ private onBlur;
32
+ private subMenuSelectOperations;
33
+ private addSubMenuAttributes;
34
+ private searchEventBind;
35
+ private searchChangeHandler;
36
+ private addressPathClickHandler;
37
+ private triggerFileOpen;
38
+ private onShowInput;
39
+ private updatePath;
40
+ private onUpdatePath;
41
+ private onCreateEnd;
42
+ private onRenameEnd;
43
+ private onDeleteEnd;
44
+ private removeSearchValue;
45
+ private onResize;
46
+ private onPasteEnd;
47
+ private addEventListener;
48
+ private keyActionHandler;
49
+ private removeEventListener;
50
+ private onDropInit;
51
+ /**
52
+ * For internal use only - Get the module name.
53
+ *
54
+ * @returns {string} - returns the module name
55
+ * @private
56
+ */
57
+ private getModuleName;
58
+ destroy(): void;
59
+ private onSearchTextChange;
60
+ }
@@ -0,0 +1,423 @@
1
+ import { EventHandler, closest, isNullOrUndefined, KeyboardEvents, KeyboardEventArgs } from '@syncfusion/ej2-base';
2
+ import { getValue, addClass, removeClass, remove, createElement, DragEventArgs } from '@syncfusion/ej2-base';
3
+ import { TextBox, ChangedEventArgs } from '@syncfusion/ej2-inputs';
4
+ import { IFileManager, NotifyArgs, ReadArgs, FileOpenEventArgs } from '../base/interface';
5
+ import { DropDownButton, MenuEventArgs } from '@syncfusion/ej2-splitbuttons';
6
+ import { read } from '../common/operations';
7
+ import { getLocaleText, searchWordHandler } from '../common/utility';
8
+ import * as events from '../base/constant';
9
+ import * as CLS from '../base/classes';
10
+ import { SearchSettingsModel } from '../models';
11
+
12
+ /**
13
+ * BreadCrumbBar module
14
+ */
15
+ export class BreadCrumbBar {
16
+
17
+ /* Internal variables */
18
+ private parent: IFileManager;
19
+ public addressPath: string = '';
20
+ public addressBarLink: string = '';
21
+ public searchObj: TextBox;
22
+ private subMenuObj: DropDownButton;
23
+ private keyboardModule: KeyboardEvents;
24
+ private searchTimer: number = null;
25
+ private keyConfigs: { [key: string]: string };
26
+ private searchWrapWidth: number = null;
27
+ /**
28
+ * constructor for addressbar module
29
+ *
30
+ * @hidden
31
+ * @param {IFileManager} parent - specifies parent element.
32
+ * @private
33
+ *
34
+ */
35
+ constructor(parent?: IFileManager) {
36
+ this.parent = parent;
37
+ this.keyConfigs = {
38
+ enter: 'enter'
39
+ };
40
+ this.render();
41
+ }
42
+ private onPropertyChanged(e: NotifyArgs): void {
43
+ if (e.module !== this.getModuleName() && e.module !== 'common') {
44
+ return;
45
+ }
46
+ for (const prop of Object.keys(e.newProp)) {
47
+ const value: SearchSettingsModel = e.newProp.searchSettings;
48
+ switch (prop) {
49
+ case 'searchSettings':
50
+ if (!isNullOrUndefined(value.allowSearchOnTyping)) {
51
+ this.searchEventBind(value.allowSearchOnTyping);
52
+ }
53
+ if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&
54
+ !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&
55
+ isNullOrUndefined(value.ignoreCase))) {
56
+ searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);
57
+ }
58
+ break;
59
+ }
60
+ }
61
+ }
62
+ private render(): void {
63
+ this.addEventListener();
64
+ }
65
+ public onPathChange(): void {
66
+ const pathNames: string[] = this.parent.pathNames;
67
+ const paths: string[] = this.parent.path.split('/');
68
+ const addressbarUL: HTMLElement = this.parent.createElement('ul', { className: 'e-addressbar-ul' });
69
+ let addressbarLI: HTMLElement = null;
70
+ const pathNamesLen: number = pathNames.length;
71
+ if (pathNames.length > 0) {
72
+ let id: string = '';
73
+ for (let i: number = 0; i < pathNamesLen; i++) {
74
+ let addressATag: HTMLElement = null;
75
+ addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });
76
+ for (let j: number = 0; j <= i; j++) {
77
+ id = id + paths[j as number] + '/';
78
+ }
79
+ addressbarLI.setAttribute('data-utext', id);
80
+ if (i !== 0) {
81
+ const icon: HTMLElement = createElement('span', { className: CLS.ICONS });
82
+ addressbarLI.appendChild(icon);
83
+ }
84
+ if (pathNamesLen - i !== 1) {
85
+ addressATag = createElement('a', { className: CLS.LIST_TEXT });
86
+ addressbarLI.setAttribute('tabindex', '0');
87
+ } else {
88
+ addressATag = createElement('span', { className: CLS.LIST_TEXT });
89
+ }
90
+ id = '';
91
+ addressATag.innerText = pathNames[i as number];
92
+ addressbarLI.appendChild(addressATag);
93
+ addressbarUL.appendChild(addressbarLI);
94
+ }
95
+ const ulElement: Element = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');
96
+ if (!isNullOrUndefined(ulElement)) {
97
+ if (!isNullOrUndefined(this.subMenuObj)) {
98
+ this.subMenuObj.destroy();
99
+ }
100
+ remove(ulElement);
101
+ }
102
+ const searchWrap: Element = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');
103
+ if (!searchWrap) {
104
+ this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);
105
+ } else {
106
+ this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);
107
+ }
108
+ this.updateBreadCrumbBar(addressbarUL);
109
+ }
110
+ }
111
+ /* istanbul ignore next */
112
+ private updateBreadCrumbBar(addresBarUL: HTMLElement): void {
113
+ const liElements: NodeListOf<Element> = addresBarUL.querySelectorAll('li');
114
+ const ulElement: Element = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');
115
+ const style: CSSStyleDeclaration = window.getComputedStyle(ulElement, null);
116
+ const pRight: number = parseFloat(style.getPropertyValue('padding-right'));
117
+ const pLeft: number = parseFloat(style.getPropertyValue('padding-left'));
118
+ let breadCrumbBarWidth: number = (<HTMLElement>ulElement).offsetWidth - pRight - pLeft;
119
+ const addressbarUL: HTMLElement = this.parent.createElement('ul', { className: 'e-addressbar-ul' });
120
+ let liElementsWidth: number = 0;
121
+ const liElementsWidths: number[] = [];
122
+ for (let i: number = 0; i < liElements.length; i++) {
123
+ const width: number = liElements[i as number].clientWidth;
124
+ liElementsWidths.push(width);
125
+ liElementsWidth = liElementsWidth + width;
126
+ }
127
+ if (!isNullOrUndefined(ulElement)) {
128
+ remove(ulElement);
129
+ }
130
+ const searchContainer: HTMLElement = this.parent.createElement('div');
131
+ searchContainer.setAttribute('class', 'e-search-wrap');
132
+ const id: string = this.parent.element.id + CLS.SEARCH_ID;
133
+ const searchInput: HTMLElement = createElement('input', { id: id,
134
+ attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });
135
+ searchContainer.appendChild(searchInput);
136
+ const searchEle: Element = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');
137
+ if (isNullOrUndefined(searchEle)) {
138
+ this.parent.breadCrumbBarNavigation.appendChild(searchContainer);
139
+ const span: Element = createElement('span', { className: 'e-icons e-fe-search' });
140
+ EventHandler.add(span, 'click', this.onShowInput, this);
141
+ searchInput.parentElement.insertBefore(span, searchInput);
142
+ this.searchObj = new TextBox({
143
+ value: '',
144
+ showClearButton: true,
145
+ placeholder: getLocaleText(this.parent, 'Search'),
146
+ focus: this.onFocus.bind(this),
147
+ blur: this.onBlur.bind(this)
148
+ });
149
+ this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);
150
+ this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);
151
+ const search: Element = this.searchObj.element.nextElementSibling;
152
+ EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);
153
+ EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);
154
+ }
155
+ const searchWrap: HTMLElement = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');
156
+ breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);
157
+ if (liElementsWidth > breadCrumbBarWidth) {
158
+ let i: number = liElements.length;
159
+ while (i--) {
160
+ const diff: number = breadCrumbBarWidth - liElementsWidths[i as number];
161
+ if (diff > 40) {
162
+ addressbarUL.insertBefore(liElements[i as number], addressbarUL.querySelector('li'));
163
+ breadCrumbBarWidth = diff;
164
+ } else {
165
+ const items: Object[] = [];
166
+ for (let j: number = 0; j <= i; j++) {
167
+ const liElement: Element = liElements[j as number];
168
+ items.push({
169
+ text: (<HTMLElement>liElement).innerText,
170
+ utext: liElement.getAttribute('data-utext')
171
+ });
172
+ }
173
+ const subMenuLi: HTMLElement = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });
174
+ const attributes: Object = { className: 'e-breadcrumb-submenu' };
175
+ const subMenuSpan: HTMLElement = this.parent.createElement('button', attributes);
176
+ subMenuLi.appendChild(subMenuSpan);
177
+ addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));
178
+ this.subMenuObj = new DropDownButton({
179
+ items: items,
180
+ cssClass: 'e-caret-hide e-submenu',
181
+ iconCss: CLS.ICON_BREADCRUMB,
182
+ iconPosition: 'Top',
183
+ enableHtmlSanitizer: this.parent.enableHtmlSanitizer,
184
+ beforeItemRender: this.addSubMenuAttributes.bind(this),
185
+ select: this.subMenuSelectOperations.bind(this)
186
+ });
187
+ this.subMenuObj.isStringTemplate = true;
188
+ this.subMenuObj.appendTo(subMenuSpan);
189
+ break;
190
+ }
191
+ }
192
+ this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);
193
+ } else {
194
+ this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);
195
+ }
196
+ }
197
+ /* istanbul ignore next */
198
+ private onFocus(): void {
199
+ const wrap: Element = closest(this.searchObj.element, '.e-search-wrap');
200
+ wrap.classList.add('e-focus');
201
+ }
202
+ /* istanbul ignore next */
203
+ private onKeyUp(): void {
204
+ this.parent.notify(events.pathColumn, { args: this.parent });
205
+ }
206
+ /* istanbul ignore next */
207
+ private onBlur(): void {
208
+ const wrap: Element = closest(this.searchObj.element, '.e-search-wrap');
209
+ wrap.classList.remove('e-focus');
210
+ }
211
+ /* istanbul ignore next */
212
+ private subMenuSelectOperations(event: MenuEventArgs): void {
213
+ const args: Object = { target: event.element };
214
+ this.addressPathClickHandler(<Event>args);
215
+ }
216
+ /* istanbul ignore next */
217
+ private addSubMenuAttributes(args: MenuEventArgs): void {
218
+ args.element.setAttribute('data-utext', getValue('utext', args.item));
219
+ const anchor: HTMLElement = this.parent.createElement('a', { className: 'e-list-text' });
220
+ args.element.appendChild(anchor);
221
+ }
222
+ private searchEventBind(allow: boolean): void {
223
+ if (allow) {
224
+ this.searchObj.input = this.searchChangeHandler.bind(this);
225
+ this.searchObj.change = null;
226
+ } else {
227
+ this.searchObj.change = this.searchChangeHandler.bind(this);
228
+ this.searchObj.input = null;
229
+ }
230
+ }
231
+ private searchChangeHandler(args?: ChangedEventArgs): void {
232
+ if (!isNullOrUndefined(args.value)) {
233
+ this.parent.isFiltered = false;
234
+ if (this.parent.searchSettings.allowSearchOnTyping) {
235
+ window.clearTimeout(this.searchTimer);
236
+ this.searchTimer = window.setTimeout(() => { searchWordHandler(this.parent, args.value, false); }, 300);
237
+ } else {
238
+ searchWordHandler(this.parent, args.value, false);
239
+ }
240
+ }
241
+ }
242
+ private addressPathClickHandler(e: Event): void {
243
+ const li: HTMLElement = (<HTMLElement>e.target);
244
+ if (li.nodeName === 'LI' || li.nodeName === 'A') {
245
+ const node: Element = li.nodeName === 'LI' ? li.children[0] : li;
246
+ if (!isNullOrUndefined(node)) {
247
+ this.parent.isFiltered = false;
248
+ const currentPath: string = this.updatePath((<HTMLElement>node));
249
+ this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];
250
+ this.triggerFileOpen(this.parent.itemData[0]);
251
+ read(this.parent, events.pathChanged, currentPath);
252
+ const treeNodeId: string = this.parent.pathId[this.parent.pathId.length - 1];
253
+ this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });
254
+ }
255
+ }
256
+ }
257
+
258
+ private triggerFileOpen(data: Object): void {
259
+ const eventArgs: FileOpenEventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };
260
+ delete eventArgs.cancel;
261
+ this.parent.trigger('fileOpen', eventArgs);
262
+ }
263
+
264
+ /* istanbul ignore next */
265
+ private onShowInput(): void {
266
+ if (this.parent.isMobile) {
267
+ if (this.parent.element.classList.contains(CLS.FILTER)) {
268
+ removeClass([this.parent.element], CLS.FILTER);
269
+ this.searchWrapWidth = null;
270
+ } else {
271
+ const searchWrap: HTMLElement = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');
272
+ this.searchWrapWidth = searchWrap.offsetWidth;
273
+ addClass([this.parent.element], CLS.FILTER);
274
+ this.searchObj.element.focus();
275
+ }
276
+ }
277
+ }
278
+
279
+ private updatePath(list: HTMLElement): string {
280
+ const li: Element = closest(list, 'li');
281
+ const liElementId: string = li.getAttribute('data-utext');
282
+ this.addressBarLink = liElementId;
283
+ const link: string[] = this.addressBarLink.split('/');
284
+ const ids: string[] = this.parent.pathId;
285
+ const names: string[] = this.parent.pathNames;
286
+ this.parent.pathId = [];
287
+ this.parent.pathNames = [];
288
+ let newpath: string = '';
289
+ for (let i: number = 0, len: number = link.length - 1; i < len; i++) {
290
+ this.parent.pathId.push(ids[i as number]);
291
+ this.parent.pathNames.push(names[i as number]);
292
+ newpath += link[i as number] + '/';
293
+ }
294
+ this.parent.setProperties({ path: newpath }, true);
295
+ return newpath;
296
+ }
297
+
298
+ private onUpdatePath(): void {
299
+ this.onPathChange();
300
+ this.removeSearchValue();
301
+ }
302
+
303
+ private onCreateEnd(): void {
304
+ this.onPathChange();
305
+ }
306
+
307
+ private onRenameEnd(): void {
308
+ this.onPathChange();
309
+ }
310
+
311
+ /* istanbul ignore next */
312
+ private onDeleteEnd(): void {
313
+ this.onUpdatePath();
314
+ }
315
+
316
+ /* istanbul ignore next */
317
+ private removeSearchValue(): void {
318
+ this.parent.isFiltered = false;
319
+ if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {
320
+ this.searchObj.value = '';
321
+ this.searchObj.element.value = '';
322
+ this.searchObj.dataBind();
323
+ }
324
+ }
325
+
326
+ private onResize(): void {
327
+ this.onPathChange();
328
+ }
329
+ private onPasteEnd(): void {
330
+ this.onPathChange();
331
+ }
332
+
333
+ private addEventListener(): void {
334
+ this.keyboardModule = new KeyboardEvents(
335
+ this.parent.breadCrumbBarNavigation,
336
+ {
337
+ keyAction: this.keyActionHandler.bind(this),
338
+ keyConfigs: this.keyConfigs,
339
+ eventName: 'keydown'
340
+ }
341
+ );
342
+ this.parent.on(events.modelChanged, this.onPropertyChanged, this);
343
+ EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);
344
+ this.parent.on(events.destroy, this.destroy, this);
345
+ this.parent.on(events.pathChanged, this.onUpdatePath, this);
346
+ this.parent.on(events.finalizeEnd, this.onUpdatePath, this);
347
+ this.parent.on(events.refreshEnd, this.onUpdatePath, this);
348
+ this.parent.on(events.openEnd, this.onUpdatePath, this);
349
+ this.parent.on(events.createEnd, this.onCreateEnd, this);
350
+ this.parent.on(events.renameEnd, this.onRenameEnd, this);
351
+ this.parent.on(events.deleteEnd, this.onDeleteEnd, this);
352
+ this.parent.on(events.splitterResize, this.onResize, this);
353
+ this.parent.on(events.pasteEnd, this.onPasteEnd, this);
354
+ this.parent.on(events.resizeEnd, this.onResize, this);
355
+ this.parent.on(events.searchTextChange, this.onSearchTextChange, this);
356
+ this.parent.on(events.dropInit, this.onDropInit, this);
357
+ this.parent.on(events.layoutRefresh, this.onResize, this);
358
+ this.parent.on(events.dropPath, this.onPathChange, this);
359
+ }
360
+
361
+ private keyActionHandler(e: KeyboardEventArgs): void {
362
+ switch (e.action) {
363
+ case 'enter':
364
+ this.addressPathClickHandler(e);
365
+ break;
366
+ }
367
+ }
368
+ private removeEventListener(): void {
369
+ this.keyboardModule.destroy();
370
+ this.parent.off(events.pathChanged, this.onUpdatePath);
371
+ this.parent.off(events.finalizeEnd, this.onUpdatePath);
372
+ this.parent.off(events.refreshEnd, this.onUpdatePath);
373
+ this.parent.off(events.openEnd, this.onUpdatePath);
374
+ this.parent.off(events.pasteEnd, this.onPasteEnd);
375
+ this.parent.off(events.createEnd, this.onCreateEnd);
376
+ this.parent.off(events.renameEnd, this.onRenameEnd);
377
+ this.parent.off(events.deleteEnd, this.onDeleteEnd);
378
+ this.parent.off(events.splitterResize, this.onResize);
379
+ this.parent.off(events.resizeEnd, this.onResize);
380
+ this.parent.off(events.searchTextChange, this.onSearchTextChange);
381
+ this.parent.off(events.dropInit, this.onDropInit);
382
+ this.parent.off(events.layoutRefresh, this.onResize);
383
+ this.parent.off(events.dropPath, this.onPathChange);
384
+ }
385
+
386
+ /* istanbul ignore next */
387
+ private onDropInit(args: DragEventArgs): void {
388
+ if (this.parent.targetModule === this.getModuleName()) {
389
+ const liEle: Element = args.target.closest('li');
390
+ this.parent.dropPath = this.updatePath(<HTMLElement>(liEle.children[0]));
391
+ this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);
392
+ this.triggerFileOpen(this.parent.dropData);
393
+ const treeNodeId: string = this.parent.pathId[this.parent.pathId.length - 1];
394
+ this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });
395
+ }
396
+ }
397
+
398
+ /**
399
+ * For internal use only - Get the module name.
400
+ *
401
+ * @returns {string} - returns the module name
402
+ * @private
403
+ */
404
+ private getModuleName(): string {
405
+ return 'breadcrumbbar';
406
+ }
407
+
408
+ public destroy(): void {
409
+ if (this.parent.isDestroyed) { return; }
410
+ this.removeEventListener();
411
+ /* istanbul ignore next */
412
+ if (!isNullOrUndefined(this.subMenuObj)) {
413
+ this.subMenuObj.destroy();
414
+ }
415
+ if (!isNullOrUndefined(this.searchObj)) {
416
+ this.searchObj.destroy();
417
+ }
418
+ }
419
+
420
+ private onSearchTextChange(args: ReadArgs): void {
421
+ this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());
422
+ }
423
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * File Manager actions modules
3
+ */
4
+ export * from './toolbar';
5
+ export * from './breadcrumb-bar';
6
+ export * from './virtualization';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * File Manager actions modules
3
+ */
4
+ export * from './toolbar';
5
+ export * from './breadcrumb-bar';
6
+ export * from './virtualization';
@@ -0,0 +1,54 @@
1
+ import { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';
2
+ import { IFileManager } from '../base/interface';
3
+ /**
4
+ * Toolbar module
5
+ */
6
+ export declare class Toolbar {
7
+ private parent;
8
+ private items;
9
+ private buttonObj;
10
+ private layoutBtnObj;
11
+ private default;
12
+ private single;
13
+ private multiple;
14
+ private selection;
15
+ toolbarObj: BaseToolbar;
16
+ /**
17
+ * Constructor for the Toolbar module
18
+ *
19
+ * @hidden
20
+ * @param {IFileManager} parent - specifies the parent element.
21
+ * @private
22
+ */
23
+ constructor(parent?: IFileManager);
24
+ private render;
25
+ getItemIndex(item: string): number;
26
+ private getItems;
27
+ private onClicked;
28
+ private toolbarCreateHandler;
29
+ private updateSortByButton;
30
+ private getPupupId;
31
+ private layoutChange;
32
+ private toolbarItemData;
33
+ private getItemModel;
34
+ private getId;
35
+ private addEventListener;
36
+ private reRenderToolbar;
37
+ private onSelectionChanged;
38
+ private hideItems;
39
+ private hideStatus;
40
+ private showPaste;
41
+ private hidePaste;
42
+ private onLayoutChange;
43
+ private removeEventListener;
44
+ /**
45
+ * For internal use only - Get the module name.
46
+ *
47
+ * @returns {string} - returns module name.
48
+ * @private
49
+ */
50
+ private getModuleName;
51
+ private onPropertyChanged;
52
+ destroy(): void;
53
+ enableItems(items: string[], isEnable?: boolean): void;
54
+ }