@syncfusion/ej2-filemanager 30.1.37 → 30.1.39

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 (148) hide show
  1. package/dist/ej2-filemanager.min.js +2 -2
  2. package/dist/ej2-filemanager.umd.min.js +2 -2
  3. package/dist/ej2-filemanager.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-filemanager.es2015.js +8 -3
  5. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  6. package/dist/es6/ej2-filemanager.es5.js +7 -2
  7. package/dist/es6/ej2-filemanager.es5.js.map +1 -1
  8. package/dist/global/ej2-filemanager.min.js +2 -2
  9. package/dist/global/ej2-filemanager.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +17 -52
  12. package/src/file-manager/common/utility.js +3 -0
  13. package/src/file-manager/layout/navigation-pane.js +4 -2
  14. package/styles/bds-lite.css +11 -12
  15. package/styles/bds.css +11 -12
  16. package/styles/bootstrap-dark-lite.css +11 -12
  17. package/styles/bootstrap-dark.css +11 -12
  18. package/styles/bootstrap-lite.css +11 -12
  19. package/styles/bootstrap.css +11 -12
  20. package/styles/bootstrap4-lite.css +11 -12
  21. package/styles/bootstrap4.css +11 -12
  22. package/styles/bootstrap5-dark-lite.css +11 -12
  23. package/styles/bootstrap5-dark.css +11 -12
  24. package/styles/bootstrap5-lite.css +11 -12
  25. package/styles/bootstrap5.3-lite.css +11 -12
  26. package/styles/bootstrap5.3.css +11 -12
  27. package/styles/bootstrap5.css +11 -12
  28. package/styles/fabric-dark-lite.css +11 -12
  29. package/styles/fabric-dark.css +11 -12
  30. package/styles/fabric-lite.css +11 -12
  31. package/styles/fabric.css +11 -12
  32. package/styles/file-manager/_layout.scss +7 -7
  33. package/styles/file-manager/bds.css +11 -12
  34. package/styles/file-manager/bootstrap-dark.css +11 -12
  35. package/styles/file-manager/bootstrap.css +11 -12
  36. package/styles/file-manager/bootstrap4.css +11 -12
  37. package/styles/file-manager/bootstrap5-dark.css +11 -12
  38. package/styles/file-manager/bootstrap5.3.css +11 -12
  39. package/styles/file-manager/bootstrap5.css +11 -12
  40. package/styles/file-manager/fabric-dark.css +11 -12
  41. package/styles/file-manager/fabric.css +11 -12
  42. package/styles/file-manager/fluent-dark.css +11 -12
  43. package/styles/file-manager/fluent.css +11 -12
  44. package/styles/file-manager/fluent2.css +11 -12
  45. package/styles/file-manager/highcontrast-light.css +11 -12
  46. package/styles/file-manager/highcontrast.css +11 -12
  47. package/styles/file-manager/material-dark.css +11 -12
  48. package/styles/file-manager/material.css +11 -12
  49. package/styles/file-manager/material3-dark.css +11 -12
  50. package/styles/file-manager/material3.css +11 -12
  51. package/styles/file-manager/tailwind-dark.css +11 -12
  52. package/styles/file-manager/tailwind.css +11 -12
  53. package/styles/file-manager/tailwind3.css +11 -12
  54. package/styles/fluent-dark-lite.css +11 -12
  55. package/styles/fluent-dark.css +11 -12
  56. package/styles/fluent-lite.css +11 -12
  57. package/styles/fluent.css +11 -12
  58. package/styles/fluent2-lite.css +11 -12
  59. package/styles/fluent2.css +11 -12
  60. package/styles/highcontrast-light-lite.css +11 -12
  61. package/styles/highcontrast-light.css +11 -12
  62. package/styles/highcontrast-lite.css +11 -12
  63. package/styles/highcontrast.css +11 -12
  64. package/styles/material-dark-lite.css +11 -12
  65. package/styles/material-dark.css +11 -12
  66. package/styles/material-lite.css +11 -12
  67. package/styles/material.css +11 -12
  68. package/styles/material3-dark-lite.css +11 -12
  69. package/styles/material3-dark.css +11 -12
  70. package/styles/material3-lite.css +11 -12
  71. package/styles/material3.css +11 -12
  72. package/styles/tailwind-dark-lite.css +11 -12
  73. package/styles/tailwind-dark.css +11 -12
  74. package/styles/tailwind-lite.css +11 -12
  75. package/styles/tailwind.css +11 -12
  76. package/styles/tailwind3-lite.css +11 -12
  77. package/styles/tailwind3.css +11 -12
  78. package/dist/ts/file-manager/actions/breadcrumb-bar.d.ts +0 -60
  79. package/dist/ts/file-manager/actions/breadcrumb-bar.ts +0 -423
  80. package/dist/ts/file-manager/actions/index.d.ts +0 -6
  81. package/dist/ts/file-manager/actions/index.ts +0 -6
  82. package/dist/ts/file-manager/actions/toolbar.d.ts +0 -54
  83. package/dist/ts/file-manager/actions/toolbar.ts +0 -609
  84. package/dist/ts/file-manager/actions/virtualization.d.ts +0 -93
  85. package/dist/ts/file-manager/actions/virtualization.ts +0 -324
  86. package/dist/ts/file-manager/base/classes.d.ts +0 -224
  87. package/dist/ts/file-manager/base/classes.ts +0 -225
  88. package/dist/ts/file-manager/base/constant.d.ts +0 -136
  89. package/dist/ts/file-manager/base/constant.ts +0 -137
  90. package/dist/ts/file-manager/base/file-manager-model.d.ts +0 -520
  91. package/dist/ts/file-manager/base/file-manager.d.ts +0 -867
  92. package/dist/ts/file-manager/base/file-manager.ts +0 -2061
  93. package/dist/ts/file-manager/base/index.d.ts +0 -8
  94. package/dist/ts/file-manager/base/index.ts +0 -8
  95. package/dist/ts/file-manager/base/interface.d.ts +0 -952
  96. package/dist/ts/file-manager/base/interface.ts +0 -931
  97. package/dist/ts/file-manager/common/index.d.ts +0 -5
  98. package/dist/ts/file-manager/common/index.ts +0 -5
  99. package/dist/ts/file-manager/common/operations.d.ts +0 -122
  100. package/dist/ts/file-manager/common/operations.ts +0 -1369
  101. package/dist/ts/file-manager/common/utility.d.ts +0 -644
  102. package/dist/ts/file-manager/common/utility.ts +0 -1728
  103. package/dist/ts/file-manager/index.d.ts +0 -9
  104. package/dist/ts/file-manager/index.ts +0 -9
  105. package/dist/ts/file-manager/layout/details-view.d.ts +0 -152
  106. package/dist/ts/file-manager/layout/details-view.ts +0 -1990
  107. package/dist/ts/file-manager/layout/index.d.ts +0 -6
  108. package/dist/ts/file-manager/layout/index.ts +0 -6
  109. package/dist/ts/file-manager/layout/large-icons-view.d.ts +0 -157
  110. package/dist/ts/file-manager/layout/large-icons-view.ts +0 -1684
  111. package/dist/ts/file-manager/layout/navigation-pane.d.ts +0 -104
  112. package/dist/ts/file-manager/layout/navigation-pane.ts +0 -919
  113. package/dist/ts/file-manager/models/ajax-settings-model.d.ts +0 -36
  114. package/dist/ts/file-manager/models/ajax-settings.d.ts +0 -30
  115. package/dist/ts/file-manager/models/ajax-settings.ts +0 -39
  116. package/dist/ts/file-manager/models/column-model.d.ts +0 -155
  117. package/dist/ts/file-manager/models/column.d.ts +0 -179
  118. package/dist/ts/file-manager/models/column.ts +0 -216
  119. package/dist/ts/file-manager/models/contextMenu-settings-model.d.ts +0 -36
  120. package/dist/ts/file-manager/models/contextMenu-settings.d.ts +0 -33
  121. package/dist/ts/file-manager/models/contextMenu-settings.ts +0 -44
  122. package/dist/ts/file-manager/models/default-locale.d.ts +0 -4
  123. package/dist/ts/file-manager/models/default-locale.ts +0 -101
  124. package/dist/ts/file-manager/models/details-view-settings-model.d.ts +0 -30
  125. package/dist/ts/file-manager/models/details-view-settings.d.ts +0 -31
  126. package/dist/ts/file-manager/models/details-view-settings.ts +0 -54
  127. package/dist/ts/file-manager/models/index.d.ts +0 -19
  128. package/dist/ts/file-manager/models/index.ts +0 -19
  129. package/dist/ts/file-manager/models/navigation-pane-settings-model.d.ts +0 -40
  130. package/dist/ts/file-manager/models/navigation-pane-settings.d.ts +0 -34
  131. package/dist/ts/file-manager/models/navigation-pane-settings.ts +0 -42
  132. package/dist/ts/file-manager/models/search-settings-model.d.ts +0 -42
  133. package/dist/ts/file-manager/models/search-settings.d.ts +0 -44
  134. package/dist/ts/file-manager/models/search-settings.ts +0 -53
  135. package/dist/ts/file-manager/models/toolbar-settings-model.d.ts +0 -197
  136. package/dist/ts/file-manager/models/toolbar-settings.d.ts +0 -174
  137. package/dist/ts/file-manager/models/toolbar-settings.ts +0 -198
  138. package/dist/ts/file-manager/models/upload-settings-model.d.ts +0 -70
  139. package/dist/ts/file-manager/models/upload-settings.d.ts +0 -61
  140. package/dist/ts/file-manager/models/upload-settings.ts +0 -75
  141. package/dist/ts/file-manager/pop-up/context-menu.d.ts +0 -64
  142. package/dist/ts/file-manager/pop-up/context-menu.ts +0 -693
  143. package/dist/ts/file-manager/pop-up/dialog.d.ts +0 -31
  144. package/dist/ts/file-manager/pop-up/dialog.ts +0 -1009
  145. package/dist/ts/file-manager/pop-up/index.d.ts +0 -5
  146. package/dist/ts/file-manager/pop-up/index.ts +0 -5
  147. package/dist/ts/index.d.ts +0 -4
  148. package/dist/ts/index.ts +0 -4
@@ -1,919 +0,0 @@
1
- import { TreeView as BaseTreeView, NodeSelectEventArgs, NodeExpandEventArgs, DrawNodeEventArgs } from '@syncfusion/ej2-navigations';
2
- import { NodeEditEventArgs, NodeClickEventArgs } from '@syncfusion/ej2-navigations';
3
- import { isNullOrUndefined as isNOU, select, setValue, getValue, DragEventArgs, Draggable } from '@syncfusion/ej2-base';
4
- import { KeyboardEvents, KeyboardEventArgs, Touch, closest } from '@syncfusion/ej2-base';
5
- import { DataManager, Query } from '@syncfusion/ej2-data';
6
- import * as events from '../base/constant';
7
- import * as CLS from '../base/classes';
8
- import { IFileManager, ReadArgs, FileLoadEventArgs, NotifyArgs, FileOpenEventArgs, FileSelectEventArgs } from '../base/interface';
9
- import { read, Download, GetDetails, Delete, isFileSystemData } from '../common/operations';
10
- import { createDialog } from '../pop-up/dialog';
11
- import { updatePath, getPath, getDirectories } from '../common/utility';
12
- import { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getDirectoryPath, getModule, getPathId } from '../common/index';
13
- import { copyFiles, cutFiles, removeActive, pasteHandler, getParentPath, readDropPath } from '../common/index';
14
- import { hasEditAccess, createDeniedDialog, hasDownloadAccess, getAccessClass } from '../common/index';
15
-
16
- /**
17
- * NavigationPane module
18
- */
19
- export class NavigationPane {
20
-
21
- /* Internal variables */
22
- private parent: IFileManager;
23
- public treeObj: BaseTreeView;
24
- public activeNode: Element;
25
- private keyboardModule: KeyboardEvents;
26
- private keyConfigs: { [key: string]: string };
27
- private expandNodeTarget: string;
28
- public removeNodes: string[] = [];
29
- public moveNames: string[] = [];
30
- public touchClickObj: Touch;
31
- // Specifies the previously selected nodes in the treeview control.
32
- public previousSelected: string[] = [];
33
- private isDrag: boolean = false;
34
- private dragObj: Draggable;
35
- private isPathDragged: boolean = false;
36
- private isRenameParent: boolean = false;
37
- private isRightClick: boolean = false;
38
- private isSameNodeClicked: boolean = false;
39
- private isNodeExpandCalled: boolean = false;
40
- private renameParent: string = null;
41
- // Specifies whether the nodeClicked event of the treeview control is triggered or not.
42
- private isNodeClickCalled: boolean = false;
43
- // Specifies whether to restrict node selection in the treeview control.
44
- private restrictSelecting: boolean = false;
45
- /**
46
- * Constructor for the TreeView module
47
- *
48
- * @param {IFileManager} parent - specifies the parent element.
49
- * @hidden
50
- */
51
- /* istanbul ignore next */
52
- constructor(parent?: IFileManager) {
53
- this.parent = parent;
54
- this.addEventListener();
55
- this.keyConfigs = {
56
- altEnter: 'alt+enter',
57
- esc: 'escape',
58
- del: 'delete',
59
- ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',
60
- ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',
61
- ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',
62
- ctrlShiftN: 'ctrl+shift+n',
63
- shiftF10: 'shift+F10',
64
- f2: 'f2'
65
- };
66
- }
67
-
68
- private onInit(): void {
69
- if (!isNOU(this.treeObj)) { return; }
70
- const rootData: { [key: string]: Object; } = getValue(this.parent.pathId[0], this.parent.feParent);
71
- setValue('_fm_icon', 'e-fe-folder', rootData);
72
- const attr: Object = {};
73
- const id: string = getValue('id', rootData);
74
- if (!isNOU(id)) {
75
- setValue('data-id', id, attr);
76
- }
77
- if (!hasEditAccess(rootData)) {
78
- setValue('class', getAccessClass(rootData), attr);
79
- }
80
- if (!isNOU(attr)) {
81
- setValue('_fm_htmlAttr', attr, rootData);
82
- }
83
- this.treeObj = new BaseTreeView({
84
- fields: {
85
- dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',
86
- hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'
87
- },
88
- enableHtmlSanitizer: this.parent.enableHtmlSanitizer,
89
- sortOrder: this.parent.navigationPaneSettings.sortOrder,
90
- nodeSelecting: this.onNodeSelecting.bind(this),
91
- nodeSelected: this.onNodeSelected.bind(this),
92
- nodeExpanding: this.onNodeExpand.bind(this),
93
- nodeClicked: this.onNodeClicked.bind(this),
94
- allowEditing: true,
95
- nodeEditing: this.onNodeEditing.bind(this),
96
- drawNode: this.onDrowNode.bind(this),
97
- enableRtl: this.parent.enableRtl,
98
- dataBound: this.addDragDrop.bind(this)
99
- });
100
- this.treeObj.isStringTemplate = true;
101
- this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);
102
- this.wireEvents();
103
- }
104
-
105
- private addDragDrop(): void {
106
- if (!this.parent.isMobile && this.treeObj) {
107
- if (this.parent.allowDragAndDrop && isNOU(this.dragObj)) {
108
- this.dragObj = new Draggable(this.treeObj.element, {
109
- cursorAt: this.parent.dragCursorPosition,
110
- dragTarget: '.' + CLS.FULLROW,
111
- distance: 5,
112
- dragArea: this.parent.element,
113
- drag: draggingHandler.bind(this, this.parent),
114
- dragStart: (args: DragEventArgs) => {
115
- dragStartHandler(this.parent, args, this.dragObj);
116
- },
117
- dragStop: dragStopHandler.bind(this, this.parent),
118
- enableTailMode: true,
119
- enableAutoScroll: false,
120
- helper: this.dragHelper.bind(this)
121
- });
122
- } else if (!this.parent.allowDragAndDrop && this.dragObj) {
123
- this.dragObj.destroy();
124
- this.dragObj = null;
125
- }
126
- }
127
- }
128
-
129
- public dragHelper(args: { element: HTMLElement, sender: MouseEvent & TouchEvent }): HTMLElement {
130
- const dragTarget: Element = <Element>args.sender.target;
131
- if (!dragTarget.classList.contains(CLS.FULLROW)) { return null; }
132
- const dragLi: Element = closest(dragTarget, 'li');
133
- this.parent.dragPath = '';
134
- this.parent.dragData = [];
135
- this.parent.activeElements = [];
136
- this.parent.activeElements = [dragLi];
137
- this.parent.dragNodes = [];
138
- getModule(this.parent, dragLi);
139
- this.parent.dragData = <{ [key: string]: Object; }[]>this.getTreeData(dragLi);
140
- this.parent.dragPath = this.getDragPath(dragLi, <string>this.parent.dragData[0].name);
141
- this.parent.dragNodes.push(<string>this.parent.dragData[0].name);
142
- createVirtualDragElement(this.parent);
143
- return this.parent.virtualDragElement;
144
- }
145
-
146
- private getDragPath(dragLi: Element, text: string): string {
147
- const path: string = this.getDropPath(dragLi, text);
148
- return getParentPath(path);
149
- }
150
-
151
- private getDropPath(node: Element, text: string): string {
152
- const id: string = node.getAttribute('data-id');
153
- const newText: string = this.parent.hasId ? id : text;
154
- return getPath(node, newText, this.parent.hasId);
155
- }
156
-
157
- private onDrowNode(args: DrawNodeEventArgs): void {
158
- const eventArgs: FileLoadEventArgs = {
159
- element: args.node,
160
- fileDetails: args.nodeData,
161
- module: 'NavigationPane'
162
- };
163
- this.parent.trigger('fileLoad', eventArgs);
164
- }
165
-
166
- private addChild(files: { [key: string]: Object; }[], target: string, prevent: boolean): void {
167
- const directories: Object[] = getDirectories(files);
168
- const targetDirectory: object[] = this.getTreeData(target);
169
- if ( directories.length > 0 && targetDirectory.length > 0 &&
170
- ((directories[0] as { [key: string]: Object }).filterPath == null ||
171
- isNOU(targetDirectory[0])
172
- && (targetDirectory[0] as { [key: string]: Object }).filterPath == null
173
- || (directories[0] as { [key: string]: Object }).filterPath !==
174
- (targetDirectory[0] as { [key: string]: Object }).filterPath)
175
- ) {
176
- let length: number = 0;
177
- const folders: { [key: string]: Object; }[] = <{ [key: string]: Object; }[]>directories;
178
- while (length < directories.length) {
179
- // eslint-disable-next-line camelcase
180
- folders[parseInt(length.toString(), 10)]._fm_icon = 'e-fe-folder';
181
- const attr: Object = {};
182
- const id: string = getValue('id', folders[length as number]);
183
- if (!isNOU(id)) {
184
- setValue('data-id', id, attr);
185
- }
186
- if (!hasEditAccess(folders[length as number])) {
187
- setValue('class', getAccessClass(folders[length as number]), attr);
188
- }
189
- if (!isNOU(attr)) {
190
- setValue('_fm_htmlAttr', attr, folders[length as number]);
191
- }
192
- length++;
193
- }
194
- const element: Element = select('[data-uid="' + target + '"]', this.treeObj.element);
195
- const childElements: Element = select('ul', element);
196
- if (isNOU(childElements)) {
197
- this.treeObj.addNodes(directories as { [key: string]: Object; }[], target, null, prevent);
198
- }
199
- }
200
- }
201
-
202
- // Node Selecting event handler
203
- private onNodeSelecting(args: NodeSelectEventArgs): void {
204
- if (!args.isInteracted && !this.isRightClick &&
205
- !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {
206
- this.restrictSelecting = false;
207
- this.isNodeClickCalled = false;
208
- return;
209
- }
210
- if (!this.renameParent) {
211
- this.parent.activeModule = 'navigationpane';
212
- const nodeData: Object[] = this.getTreeData(getValue('id', args.nodeData));
213
- if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked || this.isPathDragged) {
214
- this.isNodeClickCalled = false;
215
- if (!this.isSameNodeClicked)
216
- {
217
- this.isSameNodeClicked = true;
218
- const selecEventArgs: FileSelectEventArgs =
219
- { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };
220
- this.parent.trigger('fileSelect', selecEventArgs);
221
- }
222
- if (!this.isRightClick)
223
- {
224
- const eventArgs: FileOpenEventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };
225
- this.parent.trigger('fileOpen', eventArgs);
226
- args.cancel = eventArgs.cancel;
227
- }
228
- if (args.cancel) {
229
- this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;
230
- this.isNodeClickCalled = true;
231
- this.isSameNodeClicked = false;
232
- this.isPathDragged = false;
233
- this.previousSelected = this.treeObj.selectedNodes;
234
- this.treeObj.setProperties({selectedNodes: [args.node.getAttribute('data-uid')]});
235
- }
236
- }
237
- else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')){
238
- this.isSameNodeClicked = true;
239
- const selecEventArgs: FileSelectEventArgs =
240
- { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };
241
- this.parent.trigger('fileSelect', selecEventArgs);
242
- }
243
- }
244
- }
245
-
246
- // Opens the folder while clicking open context menu item in the treeview.
247
- public openFileOnContextMenuClick(node: HTMLLIElement): void {
248
- const data: object[] = this.treeObj.getTreeData(node);
249
- this.parent.selectedItems = [];
250
- this.parent.itemData = data;
251
- this.activeNode = node;
252
- this.parent.activeModule = 'navigationpane';
253
- const eventArgs: FileOpenEventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };
254
- this.parent.trigger('fileOpen', eventArgs);
255
- this.isNodeClickCalled = true;
256
- if (!eventArgs.cancel){
257
- updatePath(node, this.parent.itemData[0], this.parent);
258
- read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);
259
- this.parent.visitedItem = node;
260
- this.isPathDragged = this.isRenameParent = this.isRightClick = false;
261
- this.treeObj.setProperties({selectedNodes: [node.getAttribute('data-uid')]});
262
- }
263
- }
264
-
265
- private onNodeSelected(args: NodeSelectEventArgs): void {
266
- if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {
267
- this.parent.breadcrumbbarModule.searchObj.element.value = '';
268
- this.parent.isFiltered = false;
269
- this.isNodeClickCalled = false;
270
- }
271
- this.parent.searchedItems = [];
272
- if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {
273
- this.parent.pathId = getPathId(args.node);
274
- return;
275
- }
276
- this.activeNode = args.node;
277
- this.parent.activeModule = 'navigationpane';
278
- const nodeData: Object[] = this.getTreeData(getValue('id', args.nodeData));
279
- this.parent.selectedItems = [];
280
- this.parent.itemData = nodeData;
281
- const previousPath: string = this.parent.path;
282
- if (!this.isRightClick && this.isSameNodeClicked ) {
283
- updatePath(args.node, this.parent.itemData[0], this.parent);
284
- }
285
- else {
286
- this.parent.pathId = getPathId(args.node);
287
- this.parent.visitedItem = args.node;
288
- }
289
- if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {
290
- this.expandNodeTarget = 'add';
291
- }
292
- if (previousPath !== this.parent.path) {
293
- if (!this.isRightClick && this.isSameNodeClicked) {
294
- read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);
295
- this.isNodeClickCalled = true;
296
- }
297
- this.parent.visitedItem = args.node;
298
- }
299
- this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;
300
- }
301
- /* istanbul ignore next */
302
- private onPathDrag(args: object[]): void {
303
- this.isPathDragged = true;
304
- this.selectResultNode(args[0]);
305
- }
306
- /* istanbul ignore next */
307
- private onNodeExpand(args: NodeExpandEventArgs): void {
308
- if (!args.isInteracted && !this.isDrag) { return; }
309
- if (args.node.querySelector('.' + CLS.LIST_ITEM) === null) {
310
- this.isNodeExpandCalled = true;
311
- const text: string = getValue('text', args.nodeData);
312
- const id: string = args.node.getAttribute('data-id');
313
- const isId: boolean = isNOU(id) ? false : true;
314
- const newText: string = isNOU(id) ? text : id;
315
- const path: string = getPath(args.node, newText, isId);
316
- this.expandNodeTarget = args.node.getAttribute('data-uid');
317
- this.parent.expandedId = this.expandNodeTarget;
318
- this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));
319
- this.parent.pathId.push(getValue('id', args.nodeData));
320
- read(this.parent, events.nodeExpand, path);
321
- }
322
- }
323
-
324
- /* istanbul ignore next */
325
- private onNodeExpanded(args: ReadArgs): void {
326
- this.addChild(args.files, this.expandNodeTarget, false);
327
- this.parent.expandedId = null;
328
- this.isNodeExpandCalled = false;
329
- }
330
-
331
- private onNodeClicked(args: NodeClickEventArgs): void {
332
- this.parent.activeModule = 'navigationpane';
333
- this.previousSelected = this.treeObj.selectedNodes;
334
- this.activeNode = args.node;
335
- if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {
336
- this.isRightClick = true;
337
- this.isNodeClickCalled = true;
338
- this.treeObj.setProperties({selectedNodes: [args.node.getAttribute('data-uid')]});
339
- } else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {
340
- this.parent.setProperties({ selectedItems: [] }, true);
341
- const layout: string = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';
342
- this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });
343
- } else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {
344
- if (args.event.which === 3)
345
- {
346
- this.isRightClick = true;
347
- }
348
- this.isSameNodeClicked = true;
349
- this.isNodeClickCalled = true;
350
- }
351
- }
352
-
353
- /* istanbul ignore next */
354
- private onNodeEditing(args: NodeEditEventArgs): void {
355
- if (!isNOU(args.innerHtml)) {
356
- args.cancel = true;
357
- }
358
- }
359
-
360
- private onPathChanged(args: ReadArgs): void {
361
- this.parent.isCut = false;
362
- const currFiles: { [key: string]: Object; }[] = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);
363
- if (this.expandNodeTarget === 'add') {
364
- const sNode: Element = select('[data-uid="' + this.treeObj.selectedNodes[0] + '"]', this.treeObj.element);
365
- const ul: Element = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;
366
- if (isNOU(ul)) {
367
- this.addChild(args.files, this.treeObj.selectedNodes[0], true);
368
- }
369
- this.expandNodeTarget = '';
370
- }
371
- if (isNOU(currFiles)) {
372
- setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);
373
- }
374
- if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {
375
- this.updateTree(args);
376
- }
377
- }
378
-
379
- private updateTree(args: ReadArgs): void {
380
- if (this.treeObj) {
381
- const id: string = this.treeObj.selectedNodes[0];
382
- this.updateTreeNode(args, id);
383
- }
384
- }
385
-
386
- private updateTreeNode(args: ReadArgs, id: string): void {
387
- const toExpand: boolean = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;
388
- this.removeChildNodes(id);
389
- this.addChild(args.files, id, !toExpand);
390
- }
391
-
392
- private removeChildNodes(id: string): void {
393
- const sNode: Element = select('[data-uid="' + id + '"]', this.treeObj.element);
394
- const parent: Element = select('.' + CLS.LIST_PARENT, sNode);
395
- const childs: Element[] = parent ? Array.prototype.slice.call(parent.children) : null;
396
- if (childs) { this.treeObj.removeNodes(childs); }
397
- }
398
-
399
- private onOpenEnd(args: ReadArgs): void {
400
- const sleId: string = this.parent.pathId[this.parent.pathId.length - 1];
401
- this.treeObj.expandAll(this.treeObj.selectedNodes);
402
- this.treeObj.setProperties({selectedNodes: [sleId]});
403
- this.expandNodeTarget = 'add';
404
- this.onPathChanged(args);
405
- }
406
-
407
- private onOpenInit(args: NotifyArgs): void {
408
- if (this.parent.activeModule === 'navigationpane') {
409
- if (args.target.querySelector('.' + CLS.ICONS)) {
410
- this.treeObj.expandAll(this.treeObj.selectedNodes);
411
- }
412
- }
413
- }
414
-
415
- private onInitialEnd(args: ReadArgs): void {
416
- this.onInit();
417
- this.addChild(args.files, getValue('_fm_id', args.cwd), false);
418
- }
419
-
420
- private onFinalizeEnd(args: ReadArgs): void {
421
- this.onInit();
422
- const id: string = getValue('_fm_id', args.cwd);
423
- this.addChild(args.files, id, false);
424
- this.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]]});
425
- }
426
-
427
- private onCreateEnd(args: ReadArgs): void {
428
- this.updateTree(args);
429
- }
430
-
431
- private onSelectedData(): void {
432
- if (this.parent.activeModule === 'navigationpane') {
433
- this.updateItemData();
434
- }
435
- }
436
-
437
- private onDeleteInit(): void {
438
- if (this.parent.activeModule === 'navigationpane') {
439
- this.updateActionData();
440
- const name: string = getValue('name', this.parent.itemData[0]);
441
- Delete(this.parent, [name], this.parent.path, 'delete');
442
- }
443
- }
444
-
445
- /* istanbul ignore next */
446
- private onDeleteEnd(args: ReadArgs): void {
447
- if (this.parent.activeModule === 'navigationpane') {
448
- const selectedNode: string = this.treeObj.selectedNodes[0];
449
- const selcetedEle: Element = select('[data-uid="' + selectedNode + '"]', this.treeObj.element);
450
- const selectedNodeEle: HTMLElement = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;
451
- this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];
452
- this.treeObj.dataBind();
453
- }
454
- this.updateTree(args);
455
- }
456
-
457
- private onRefreshEnd(args: ReadArgs): void {
458
- this.updateTree(args);
459
- }
460
-
461
- private onRenameInit(): void {
462
- if (this.parent.activeModule === 'navigationpane') {
463
- this.updateRenameData();
464
- }
465
- }
466
- /* istanbul ignore next */
467
- private onRenameEndParent(args: ReadArgs): void {
468
- const id: string = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];
469
- this.updateTreeNode(args, id);
470
- this.parent.expandedId = null;
471
- if (this.renameParent) {
472
- this.renameParent = null;
473
- } else {
474
- let resultData: Object[] = [];
475
- if (this.parent.hasId) {
476
- resultData = new DataManager(this.treeObj.getTreeData()).
477
- executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));
478
- } else {
479
- const nData: Object[] = new DataManager(this.treeObj.getTreeData()).
480
- executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));
481
- if (nData.length > 0) {
482
- resultData = new DataManager(nData).
483
- executeLocal(new Query().where('_fm_pId', 'equal', id, false));
484
- }
485
- }
486
- if (resultData.length > 0) {
487
- const id: string = this.previousSelected.length > 0 && this.treeObj.getTreeData(this.previousSelected[0]).length !== 0
488
- ? this.previousSelected[0] : getValue(this.treeObj.fields.id, resultData[0]);
489
- this.treeObj.selectedNodes = [id];
490
- this.treeObj.dataBind();
491
- this.updateItemData();
492
- }
493
- }
494
- }
495
-
496
- /* istanbul ignore next */
497
- private onRenameEnd(args: ReadArgs): void {
498
- if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {
499
- this.updateTree(args);
500
- } else {
501
- const data: { [key: string]: Object; }[] = this.treeObj.getTreeData();
502
- let resultData: Object[] = [];
503
- if (this.parent.hasId) {
504
- resultData = new DataManager(data).
505
- executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));
506
- } else {
507
- const nData: Object[] = new DataManager(data).
508
- executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.currentItemText, false));
509
- if (nData.length > 0) {
510
- resultData = new DataManager(nData).
511
- executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));
512
- }
513
- }
514
- if (resultData.length > 0) {
515
- this.renameParent = getValue(this.treeObj.fields.parentID, resultData[0]);
516
- this.parent.expandedId = this.renameParent;
517
- this.parent.itemData = this.getTreeData(this.renameParent);
518
- read(this.parent, events.renameEndParent, this.parent.filterPath.replace(/\\/g, '/'));
519
- }
520
- }
521
- }
522
-
523
- private onPropertyChanged(e: NotifyArgs): void {
524
- if (e.module !== this.getModuleName() && e.module !== 'common') {
525
- /* istanbul ignore next */
526
- return;
527
- }
528
- for (const prop of Object.keys(e.newProp)) {
529
- switch (prop) {
530
- case 'allowDragAndDrop':
531
- this.addDragDrop();
532
- break;
533
- case 'navigationPaneSettings':
534
- read(this.parent, events.finalizeEnd, this.parent.path);
535
- if (e.oldProp.navigationPaneSettings.sortOrder !== e.newProp.navigationPaneSettings.sortOrder) {
536
- this.treeObj.sortOrder = e.newProp.navigationPaneSettings.sortOrder;
537
- }
538
- break;
539
- }
540
- }
541
- }
542
-
543
- /* istanbul ignore next */
544
- private onDownLoadInit(): void {
545
- this.doDownload();
546
- }
547
-
548
- private onSelectionChanged(e: NotifyArgs): void {
549
- this.treeObj.setProperties({selectedNodes: [e.selectedNode]});
550
- }
551
-
552
- private onClearPathInit(e: NotifyArgs): void {
553
- this.removeChildNodes(e.selectedNode);
554
- }
555
-
556
- private onDragEnd(args: ReadArgs): void {
557
- if (isFileSystemData(this.parent)) {
558
- this.moveNames = [];
559
- const obj: object[] = this.parent.dragData;
560
- for (let i: number = 0; i < obj.length; i++) {
561
- if (getValue('isFile', obj[i as number]) === false) {
562
- this.moveNames.push(getValue('_fm_id', obj[i as number]));
563
- }
564
- }
565
- }
566
- let moveNames: string[] = [];
567
- if (this.parent.isPasteError || this.parent.isSearchDrag) {
568
- moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);
569
- } else {
570
- moveNames = this.moveNames;
571
- }
572
- this.treeObj.removeNodes(moveNames);
573
- }
574
- private getMoveNames(files: { [key: string]: Object; }[], flag: boolean, path: string): string[] {
575
- const moveNames: string[] = [];
576
- for (let i: number = 0; i < files.length; i++) {
577
- if (!files[i as number].isFile) {
578
- if (!this.parent.hasId) {
579
- let name: string = <string>(files[i as number].previousName);
580
- if (flag) {
581
- path = path + files[i as number].previousName;
582
- const index: number = path.lastIndexOf('/');
583
- name = path.substring(index + 1);
584
- path = path.substring(0, index + 1);
585
- }
586
- const resultData: Object[] = new DataManager(this.treeObj.getTreeData()).
587
- executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name, false));
588
- for (let j: number = 0; j < resultData.length; j++) {
589
- let fPath: string = getValue('filterPath', resultData[j as number]);
590
- fPath = fPath.replace(/\\/g, '/');
591
- if (fPath === path) {
592
- moveNames.push(getValue(this.treeObj.fields.id, resultData[j as number]));
593
- break;
594
- }
595
- }
596
- }
597
- }
598
- }
599
- return moveNames;
600
- }
601
-
602
- private onCutEnd(args: ReadArgs): void {
603
- let moveNames: string[] = [];
604
- if (this.parent.isPasteError || this.parent.isSearchCut) {
605
- this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);
606
- } else {
607
- moveNames = this.moveNames;
608
- }
609
- this.treeObj.removeNodes(moveNames);
610
- }
611
- /* istanbul ignore next */
612
- private selectResultNode(resultObj: object): void {
613
- if (!this.parent.hasId) {
614
- const path: string = getValue('filterPath', resultObj);
615
- const itemname: string = getValue('name', resultObj);
616
- const data: Object[] = new DataManager(this.treeObj.getTreeData()).
617
- executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));
618
- if (data.length > 0) {
619
- const resultData: Object[] = new DataManager(data).
620
- executeLocal(new Query().where('filterPath', 'equal', path, false));
621
- if (resultData.length > 0) {
622
- const id: string = getValue(this.treeObj.fields.id, resultData[0]);
623
- this.treeObj.selectedNodes = [id];
624
- this.treeObj.dataBind();
625
- }
626
- }
627
- } else {
628
- const selectedNode: { [key: string]: Object; } =
629
- this.treeObj.getTreeData().filter((obj: {name: string}) => obj.name === (resultObj as {name: string}).name)[0];
630
- this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];
631
- this.treeObj.dataBind();
632
- }
633
- }
634
- private onDropPath(args: ReadArgs): void {
635
- this.onpasteEnd(args);
636
- this.selectResultNode(this.parent.dropData);
637
- this.parent.isDropEnd = !this.parent.isPasteError;
638
- }
639
-
640
- private onpasteEnd(args: ReadArgs): void {
641
- let resultData: Object[] = [];
642
- if (this.parent.hasId) {
643
- resultData = new DataManager(this.treeObj.getTreeData()).
644
- executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));
645
- } else {
646
- const nData: Object[] = new DataManager(this.treeObj.getTreeData()).
647
- executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));
648
- if (nData.length > 0) {
649
- resultData = new DataManager(nData).
650
- executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));
651
- }
652
- }
653
- if (resultData.length > 0) {
654
- const id: string = getValue(this.treeObj.fields.id, resultData[0]);
655
- const toExpand: boolean = this.treeObj.expandedNodes.indexOf(id) === -1;
656
- this.removeChildNodes(id);
657
- this.addChild(args.files, id, toExpand);
658
- }
659
- this.parent.expandedId = null;
660
- this.onPathChanged(args);
661
- if (this.parent.isDragDrop) { this.checkDropPath(args); }
662
- }
663
- /* istanbul ignore next */
664
- private checkDropPath(args: ReadArgs): void {
665
- if (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {
666
- return;
667
- }
668
- if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {
669
- this.parent.isDropEnd = false;
670
- readDropPath(this.parent);
671
- } else {
672
- this.parent.isDropEnd = !this.parent.isPasteError;
673
- }
674
- }
675
-
676
- private onpasteInit(): void {
677
- if (this.parent.activeModule === this.getModuleName()) {
678
- this.updateItemData();
679
- }
680
- this.moveNames = [];
681
- const obj: object[] = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;
682
- for (let i: number = 0; i < obj.length; i++) {
683
- if (getValue('isFile', obj[i as number]) === false) {
684
- this.moveNames.push(getValue('_fm_id', obj[i as number]));
685
- }
686
- }
687
- }
688
- private oncutCopyInit(): void {
689
- if (this.parent.activeModule === this.getModuleName()) {
690
- this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);
691
- this.parent.activeElements = [this.activeNode];
692
- }
693
- }
694
-
695
- private addEventListener(): void {
696
- this.parent.on(events.modelChanged, this.onPropertyChanged, this);
697
- this.parent.on(events.downloadInit, this.onDownLoadInit, this);
698
- this.parent.on(events.initialEnd, this.onInitialEnd, this);
699
- this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);
700
- this.parent.on(events.pathChanged, this.onPathChanged, this);
701
- this.parent.on(events.pasteEnd, this.onpasteEnd, this);
702
- this.parent.on(events.cutEnd, this.onCutEnd, this);
703
- this.parent.on(events.pasteInit, this.onpasteInit, this);
704
- this.parent.on(events.nodeExpand, this.onNodeExpanded, this);
705
- this.parent.on(events.createEnd, this.onCreateEnd, this);
706
- this.parent.on(events.selectedData, this.onSelectedData, this);
707
- this.parent.on(events.deleteInit, this.onDeleteInit, this);
708
- this.parent.on(events.deleteEnd, this.onDeleteEnd, this);
709
- this.parent.on(events.refreshEnd, this.onRefreshEnd, this);
710
- this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);
711
- this.parent.on(events.openInit, this.onOpenInit, this);
712
- this.parent.on(events.openEnd, this.onOpenEnd, this);
713
- this.parent.on(events.destroy, this.destroy, this);
714
- this.parent.on(events.renameInit, this.onRenameInit, this);
715
- this.parent.on(events.renameEnd, this.onRenameEnd, this);
716
- this.parent.on(events.renameEndParent, this.onRenameEndParent, this);
717
- this.parent.on(events.clearPathInit, this.onClearPathInit, this);
718
- this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);
719
- this.parent.on(events.dropInit, this.onDropInit, this);
720
- this.parent.on(events.menuItemData, this.onMenuItemData, this);
721
- this.parent.on(events.dragEnd, this.onDragEnd, this);
722
- this.parent.on(events.dragging, this.onDragging, this);
723
- this.parent.on(events.dropPath, this.onDropPath, this);
724
- this.parent.on(events.detailsInit, this.onDetailsInit, this);
725
- this.parent.on(events.pathDrag, this.onPathDrag, this);
726
- }
727
-
728
- private removeEventListener(): void {
729
- this.parent.off(events.initialEnd, this.onInitialEnd);
730
- this.parent.off(events.downloadInit, this.onDownLoadInit);
731
- this.parent.off(events.finalizeEnd, this.onFinalizeEnd);
732
- this.parent.off(events.selectedData, this.onSelectedData);
733
- this.parent.off(events.modelChanged, this.onPropertyChanged);
734
- this.parent.off(events.pathChanged, this.onPathChanged);
735
- this.parent.off(events.pasteEnd, this.onpasteEnd);
736
- this.parent.off(events.cutEnd, this.onCutEnd);
737
- this.parent.off(events.pasteInit, this.onpasteInit);
738
- this.parent.off(events.updateTreeSelection, this.onSelectionChanged);
739
- this.parent.off(events.nodeExpand, this.onNodeExpanded);
740
- this.parent.off(events.createEnd, this.onCreateEnd);
741
- this.parent.off(events.refreshEnd, this.onRefreshEnd);
742
- this.parent.off(events.openInit, this.onOpenInit);
743
- this.parent.off(events.openEnd, this.onOpenEnd);
744
- this.parent.off(events.destroy, this.destroy);
745
- this.parent.off(events.renameInit, this.onRenameInit);
746
- this.parent.off(events.renameEnd, this.onRenameEnd);
747
- this.parent.off(events.renameEndParent, this.onRenameEndParent);
748
- this.parent.off(events.clearPathInit, this.onClearPathInit);
749
- this.parent.off(events.deleteInit, this.onDeleteInit);
750
- this.parent.off(events.deleteEnd, this.onDeleteEnd);
751
- this.parent.off(events.cutCopyInit, this.oncutCopyInit);
752
- this.parent.off(events.dropInit, this.onDropInit);
753
- this.parent.off(events.dragEnd, this.onDragEnd);
754
- this.parent.off(events.dragging, this.onDragging);
755
- this.parent.off(events.dropPath, this.onDropPath);
756
- this.parent.off(events.detailsInit, this.onDetailsInit);
757
- this.parent.off(events.menuItemData, this.onMenuItemData);
758
- this.parent.off(events.pathDrag, this.onPathDrag);
759
- }
760
-
761
- /* istanbul ignore next */
762
- private onDetailsInit(): void {
763
- if (this.parent.activeModule === this.getModuleName()) {
764
- const dataobj: Object[] = this.getTreeData(this.treeObj.selectedNodes[0]);
765
- this.parent.itemData = dataobj;
766
- }
767
- }
768
-
769
- private onMenuItemData(args: { [key: string]: Object; }): void {
770
- if (this.parent.activeModule === this.getModuleName()) {
771
- const liEle: Element = closest(<Element>args.target, 'li');
772
- this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));
773
- }
774
- }
775
-
776
- /* istanbul ignore next */
777
- private onDragging(args: DragEventArgs): void {
778
- const ele: Element = closest(args.target, 'li');
779
- if (ele.classList.contains('e-node-collapsed')) {
780
- this.isDrag = true;
781
- const level: number = parseInt(ele.getAttribute('aria-level'), 10);
782
- this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);
783
- this.isDrag = false;
784
- }
785
- }
786
-
787
- private onDropInit(args: DragEventArgs): void {
788
- if (this.parent.targetModule === this.getModuleName()) {
789
- const dropLi: Element = closest(args.target, 'li');
790
- this.parent.dropData = this.getTreeData(dropLi)[0];
791
- this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));
792
- }
793
- }
794
-
795
- /**
796
- * For internal use only - Get the module name.
797
- *
798
- * @returns {string} - returns the module name.
799
- * @private
800
- */
801
- private getModuleName(): string {
802
- return 'navigationpane';
803
- }
804
-
805
- public destroy(): void {
806
- if (this.parent.isDestroyed) { return; }
807
- this.removeEventListener();
808
- if (this.treeObj) {
809
- this.unWireEvents();
810
- this.treeObj.destroy();
811
- }
812
- }
813
- private wireEvents(): void {
814
- this.keyboardModule = new KeyboardEvents(
815
- this.treeObj.element,
816
- {
817
- keyAction: this.keyDown.bind(this),
818
- keyConfigs: this.keyConfigs,
819
- eventName: 'keydown'
820
- }
821
- );
822
- }
823
-
824
- private unWireEvents(): void {
825
- this.keyboardModule.destroy();
826
- }
827
-
828
- /* istanbul ignore next */
829
- private keyDown(e: KeyboardEventArgs): void {
830
- const action: string = e.action;
831
- switch (action) {
832
- case 'altEnter':
833
- this.parent.notify(events.detailsInit, {});
834
- GetDetails(this.parent, [], this.parent.path, 'details');
835
- break;
836
- case 'esc':
837
- removeActive(this.parent);
838
- break;
839
- case 'del':
840
- if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {
841
- this.updateItemData();
842
- if (!hasEditAccess(this.parent.itemData[0])) {
843
- createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);
844
- } else {
845
- this.removeNodes = [];
846
- createDialog(this.parent, 'Delete');
847
- }
848
- }
849
- break;
850
- case 'ctrlC':
851
- copyFiles(this.parent);
852
- break;
853
- case 'ctrlV':
854
- this.parent.folderPath = '';
855
- pasteHandler(this.parent);
856
- break;
857
- case 'ctrlX':
858
- cutFiles(this.parent);
859
- break;
860
- case 'shiftF10':
861
- this.updateItemData();
862
- if (!hasDownloadAccess(this.parent.itemData[0])) {
863
- createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);
864
- return;
865
- }
866
- if (this.parent.selectedItems.length !== 0) {
867
- this.doDownload();
868
- }
869
- break;
870
- case 'f2':
871
- if (this.parent.selectedItems.length === 0) {
872
- const data: Object = this.getTreeData(this.treeObj.selectedNodes[0])[0];
873
- if (!hasEditAccess(data)) {
874
- createDeniedDialog(this.parent, data, events.permissionEdit);
875
- } else {
876
- this.updateRenameData();
877
- createDialog(this.parent, 'Rename');
878
- }
879
- }
880
- break;
881
- }
882
- }
883
-
884
- private getTreeData(args: string | Element): object[] {
885
- const data: object[] = this.treeObj.getTreeData(args);
886
- for (let i: number = 0; i < data.length; i++) {
887
- if (isNOU(getValue('hasChild', data[i as number]))) { setValue('hasChild', false, data[i as number]); }
888
- }
889
- return data;
890
- }
891
-
892
- private updateRenameData(): void {
893
- this.updateItemData();
894
- this.parent.currentItemText = getValue('name', this.parent.itemData[0]);
895
- }
896
-
897
- private updateItemData(): void {
898
- const data: Object = this.getTreeData(this.treeObj.selectedNodes[0])[0];
899
- this.parent.itemData = [data];
900
- this.parent.isFile = false;
901
- }
902
-
903
- private updateActionData(): void {
904
- this.updateItemData();
905
- const node: HTMLLIElement = select('[data-uid="' + this.parent.pathId[this.parent.pathId.length - 1] + '"]', this.treeObj.element);
906
- updatePath(node, this.parent.itemData[0], this.parent);
907
- const newPath: string = getParentPath(this.parent.path);
908
- this.parent.setProperties({ path: newPath }, true);
909
- this.parent.pathId.pop();
910
- this.parent.pathNames.pop();
911
- }
912
- /* istanbul ignore next */
913
- private doDownload(): void {
914
- const newPath: string = getParentPath(this.parent.path);
915
- const itemId: string = this.treeObj.selectedNodes[0];
916
- const name: string = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);
917
- Download(this.parent, newPath, [name]);
918
- }
919
- }