@syncfusion/ej2-filemanager 20.1.52-10460 → 20.1.52-10461

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 (172) hide show
  1. package/CHANGELOG.md +412 -410
  2. package/README.md +69 -69
  3. package/dist/ej2-filemanager.min.js +1 -0
  4. package/dist/ej2-filemanager.umd.min.js +1 -10
  5. package/dist/ej2-filemanager.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-filemanager.es2015.js +57 -54
  7. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  8. package/dist/es6/ej2-filemanager.es5.js +174 -171
  9. package/dist/es6/ej2-filemanager.es5.js.map +1 -1
  10. package/dist/global/ej2-filemanager.min.js +1 -10
  11. package/dist/global/ej2-filemanager.min.js.map +1 -1
  12. package/dist/global/index.d.ts +0 -9
  13. package/dist/ts/file-manager/actions/breadcrumb-bar.ts +427 -0
  14. package/dist/ts/file-manager/actions/toolbar.ts +498 -0
  15. package/dist/ts/file-manager/base/classes.ts +225 -0
  16. package/dist/ts/file-manager/base/constant.ts +137 -0
  17. package/dist/ts/file-manager/base/file-manager.ts +1659 -0
  18. package/dist/ts/file-manager/base/interface.ts +652 -0
  19. package/dist/ts/file-manager/common/operations.ts +614 -0
  20. package/dist/ts/file-manager/common/utility.ts +1503 -0
  21. package/dist/ts/file-manager/layout/details-view.ts +1837 -0
  22. package/dist/ts/file-manager/layout/large-icons-view.ts +1587 -0
  23. package/dist/ts/file-manager/layout/navigation-pane.ts +879 -0
  24. package/dist/ts/file-manager/models/ajax-settings.ts +39 -0
  25. package/dist/ts/file-manager/models/column.ts +197 -0
  26. package/dist/ts/file-manager/models/contextMenu-settings.ts +44 -0
  27. package/dist/ts/file-manager/models/default-locale.ts +102 -0
  28. package/dist/ts/file-manager/models/details-view-settings.ts +48 -0
  29. package/dist/ts/file-manager/models/navigation-pane-settings.ts +42 -0
  30. package/dist/ts/file-manager/models/search-settings.ts +48 -0
  31. package/dist/ts/file-manager/models/toolbar-settings.ts +25 -0
  32. package/dist/ts/file-manager/models/upload-settings.ts +51 -0
  33. package/dist/ts/file-manager/pop-up/context-menu.ts +614 -0
  34. package/dist/ts/file-manager/pop-up/dialog.ts +996 -0
  35. package/helpers/e2e/filemanagerHelper.js +183 -166
  36. package/license +9 -9
  37. package/package.json +72 -72
  38. package/src/file-manager/base/file-manager-model.d.ts +329 -329
  39. package/src/file-manager/base/file-manager.js +19 -19
  40. package/src/file-manager/models/ajax-settings-model.d.ts +21 -21
  41. package/src/file-manager/models/ajax-settings.js +19 -19
  42. package/src/file-manager/models/column-model.d.ts +98 -98
  43. package/src/file-manager/models/column.js +19 -19
  44. package/src/file-manager/models/contextMenu-settings-model.d.ts +21 -21
  45. package/src/file-manager/models/contextMenu-settings.js +19 -19
  46. package/src/file-manager/models/details-view-settings-model.d.ts +19 -19
  47. package/src/file-manager/models/details-view-settings.js +19 -19
  48. package/src/file-manager/models/navigation-pane-settings-model.d.ts +25 -25
  49. package/src/file-manager/models/navigation-pane-settings.js +19 -19
  50. package/src/file-manager/models/search-settings-model.d.ts +26 -26
  51. package/src/file-manager/models/search-settings.js +19 -19
  52. package/src/file-manager/models/toolbar-settings-model.d.ts +11 -11
  53. package/src/file-manager/models/toolbar-settings.js +19 -19
  54. package/src/file-manager/models/upload-settings-model.d.ts +31 -31
  55. package/src/file-manager/models/upload-settings.js +19 -19
  56. package/src/file-manager/pop-up/context-menu.js +3 -0
  57. package/styles/compatibility/bootstrap.css +1 -0
  58. package/styles/compatibility/bootstrap.scss +12 -0
  59. package/styles/compatibility/bootstrap4.css +1 -0
  60. package/styles/compatibility/bootstrap4.scss +12 -0
  61. package/styles/compatibility/fabric.css +1 -0
  62. package/styles/compatibility/fabric.scss +12 -0
  63. package/styles/compatibility/highcontrast.css +1 -0
  64. package/styles/compatibility/highcontrast.scss +12 -0
  65. package/styles/compatibility/material.css +1 -0
  66. package/styles/compatibility/material.scss +12 -0
  67. package/styles/file-manager/_all.scss +2 -2
  68. package/styles/file-manager/_bds-definition.scss +236 -0
  69. package/styles/file-manager/_bigger.scss +759 -0
  70. package/styles/file-manager/_bootstrap-dark-definition.scss +244 -240
  71. package/styles/file-manager/_bootstrap-definition.scss +245 -241
  72. package/styles/file-manager/_bootstrap4-definition.scss +246 -242
  73. package/styles/file-manager/_bootstrap5-definition.scss +242 -237
  74. package/styles/file-manager/_bootstrap5.3-definition.scss +242 -0
  75. package/styles/file-manager/_fabric-dark-definition.scss +242 -238
  76. package/styles/file-manager/_fabric-definition.scss +244 -240
  77. package/styles/file-manager/_fluent-definition.scss +249 -246
  78. package/styles/file-manager/_fluent2-definition.scss +255 -0
  79. package/styles/file-manager/_fusionnew-definition.scss +241 -0
  80. package/styles/file-manager/_highcontrast-definition.scss +244 -240
  81. package/styles/file-manager/_highcontrast-light-definition.scss +244 -240
  82. package/styles/file-manager/_layout.scss +1252 -1815
  83. package/styles/file-manager/_material-dark-definition.scss +245 -240
  84. package/styles/file-manager/_material-definition.scss +245 -240
  85. package/styles/file-manager/_material3-definition.scss +235 -0
  86. package/styles/file-manager/_tailwind-definition.scss +236 -232
  87. package/styles/file-manager/_theme.scss +418 -397
  88. package/styles/file-manager/icons/_bds.scss +235 -0
  89. package/styles/file-manager/icons/_bootstrap-dark.scss +235 -235
  90. package/styles/file-manager/icons/_bootstrap.scss +235 -236
  91. package/styles/file-manager/icons/_bootstrap4.scss +235 -236
  92. package/styles/file-manager/icons/_bootstrap5.3.scss +235 -0
  93. package/styles/file-manager/icons/_bootstrap5.scss +235 -235
  94. package/styles/file-manager/icons/_fabric-dark.scss +229 -230
  95. package/styles/file-manager/icons/_fabric.scss +229 -230
  96. package/styles/file-manager/icons/_fluent.scss +235 -235
  97. package/styles/file-manager/icons/_fluent2.scss +235 -0
  98. package/styles/file-manager/icons/_fusionnew.scss +235 -0
  99. package/styles/file-manager/icons/_highcontrast-light.scss +235 -235
  100. package/styles/file-manager/icons/_highcontrast.scss +229 -229
  101. package/styles/file-manager/icons/_material-dark.scss +235 -235
  102. package/styles/file-manager/icons/_material.scss +235 -235
  103. package/styles/file-manager/icons/_material3.scss +235 -0
  104. package/styles/file-manager/icons/_tailwind.scss +235 -235
  105. package/.eslintrc.json +0 -244
  106. package/styles/bootstrap-dark.css +0 -1920
  107. package/styles/bootstrap-dark.scss +0 -1
  108. package/styles/bootstrap.css +0 -1899
  109. package/styles/bootstrap.scss +0 -1
  110. package/styles/bootstrap4.css +0 -1935
  111. package/styles/bootstrap4.scss +0 -1
  112. package/styles/bootstrap5-dark.css +0 -1982
  113. package/styles/bootstrap5-dark.scss +0 -1
  114. package/styles/bootstrap5.css +0 -1982
  115. package/styles/bootstrap5.scss +0 -1
  116. package/styles/fabric-dark.css +0 -1891
  117. package/styles/fabric-dark.scss +0 -1
  118. package/styles/fabric.css +0 -1891
  119. package/styles/fabric.scss +0 -1
  120. package/styles/file-manager/_bootstrap5-dark-definition.scss +0 -1
  121. package/styles/file-manager/_fluent-dark-definition.scss +0 -1
  122. package/styles/file-manager/_tailwind-dark-definition.scss +0 -1
  123. package/styles/file-manager/bootstrap-dark.css +0 -1920
  124. package/styles/file-manager/bootstrap-dark.scss +0 -16
  125. package/styles/file-manager/bootstrap.css +0 -1899
  126. package/styles/file-manager/bootstrap.scss +0 -16
  127. package/styles/file-manager/bootstrap4.css +0 -1935
  128. package/styles/file-manager/bootstrap4.scss +0 -16
  129. package/styles/file-manager/bootstrap5-dark.css +0 -1982
  130. package/styles/file-manager/bootstrap5-dark.scss +0 -16
  131. package/styles/file-manager/bootstrap5.css +0 -1982
  132. package/styles/file-manager/bootstrap5.scss +0 -16
  133. package/styles/file-manager/fabric-dark.css +0 -1891
  134. package/styles/file-manager/fabric-dark.scss +0 -16
  135. package/styles/file-manager/fabric.css +0 -1891
  136. package/styles/file-manager/fabric.scss +0 -16
  137. package/styles/file-manager/fluent-dark.css +0 -1901
  138. package/styles/file-manager/fluent-dark.scss +0 -16
  139. package/styles/file-manager/fluent.css +0 -1900
  140. package/styles/file-manager/fluent.scss +0 -16
  141. package/styles/file-manager/highcontrast-light.css +0 -1897
  142. package/styles/file-manager/highcontrast-light.scss +0 -16
  143. package/styles/file-manager/highcontrast.css +0 -1897
  144. package/styles/file-manager/highcontrast.scss +0 -16
  145. package/styles/file-manager/icons/_bootstrap5-dark.scss +0 -1
  146. package/styles/file-manager/icons/_fluent-dark.scss +0 -1
  147. package/styles/file-manager/icons/_tailwind-dark.scss +0 -1
  148. package/styles/file-manager/material-dark.css +0 -1945
  149. package/styles/file-manager/material-dark.scss +0 -16
  150. package/styles/file-manager/material.css +0 -1932
  151. package/styles/file-manager/material.scss +0 -16
  152. package/styles/file-manager/tailwind-dark.css +0 -1969
  153. package/styles/file-manager/tailwind-dark.scss +0 -16
  154. package/styles/file-manager/tailwind.css +0 -1969
  155. package/styles/file-manager/tailwind.scss +0 -16
  156. package/styles/fluent-dark.css +0 -1901
  157. package/styles/fluent-dark.scss +0 -1
  158. package/styles/fluent.css +0 -1900
  159. package/styles/fluent.scss +0 -1
  160. package/styles/highcontrast-light.css +0 -1897
  161. package/styles/highcontrast-light.scss +0 -1
  162. package/styles/highcontrast.css +0 -1897
  163. package/styles/highcontrast.scss +0 -1
  164. package/styles/material-dark.css +0 -1945
  165. package/styles/material-dark.scss +0 -1
  166. package/styles/material.css +0 -1932
  167. package/styles/material.scss +0 -1
  168. package/styles/tailwind-dark.css +0 -1969
  169. package/styles/tailwind-dark.scss +0 -1
  170. package/styles/tailwind.css +0 -1969
  171. package/styles/tailwind.scss +0 -1
  172. package/tslint.json +0 -111
@@ -0,0 +1,614 @@
1
+ import { Ajax, createElement, select, extend } from '@syncfusion/ej2-base';
2
+ import { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';
3
+ import { IFileManager, ReadArgs, BeforeSendEventArgs, BeforeDownloadEventArgs } from '../base/interface';
4
+ import * as events from '../base/constant';
5
+ import { createDialog, createExtDialog } from '../pop-up/dialog';
6
+ import { FileDetails, FileDragEventArgs, FailureEventArgs, SuccessEventArgs } from '../../index';
7
+ import { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getParentPath, getPathObject } from '../common/utility';
8
+ import { generatePath } from '../common/utility';
9
+
10
+ /**
11
+ * Function to read the content from given path in File Manager.
12
+ *
13
+ * @param {IFileManager} parent - specifies the parent element.
14
+ * @param {string} event - specifies the event.
15
+ * @param {string} path - specifies the path.
16
+ * @returns {void}
17
+ * @private
18
+ */
19
+ export function read(parent: IFileManager, event: string, path: string): void {
20
+ // eslint-disable-next-line
21
+ const itemData: Object[] = parent.itemData;
22
+ for (let i: number = 0; i < itemData.length; i++) {
23
+ if (isNOU(getValue('hasChild', itemData[i]))) { setValue('hasChild', false, itemData[i]); }
24
+ }
25
+ // eslint-disable-next-line
26
+ const data: Object = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };
27
+ createAjax(parent, data, readSuccess, event);
28
+ }
29
+
30
+ /**
31
+ * Function to create new folder in File Manager.
32
+ *
33
+ * @param {IFileManager} parent - specifies the parent element.
34
+ * @param {string} itemName - specifies the item name.
35
+ * @returns {void}
36
+ * @private
37
+ */
38
+ export function createFolder(parent: IFileManager, itemName: string): void {
39
+ // eslint-disable-next-line
40
+ const data: Object = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };
41
+ createAjax(parent, data, createSuccess, itemName);
42
+ }
43
+
44
+ /**
45
+ * Function to filter the files in File Manager.
46
+ *
47
+ * @param {IFileManager} parent - specifies the parent element.
48
+ * @param {string} event - specifies the event.
49
+ * @returns {void}
50
+ * @private
51
+ */
52
+ export function filter(parent: IFileManager, event: string): void {
53
+ // eslint-disable-next-line
54
+ const data: Object = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };
55
+ // eslint-disable-next-line
56
+ let filterData: Object;
57
+ // eslint-disable-next-line
58
+ const filterDataVal: Object = parent.filterData ? extend(filterData, data, parent.filterData) : data;
59
+ createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));
60
+ }
61
+
62
+ /**
63
+ * Function to rename the folder/file in File Manager.
64
+ *
65
+ * @param {IFileManager} parent - specifies the parent element.
66
+ * @param {string} path - specifies the path.
67
+ * @param {string} itemNewName - specifies the item's new name.
68
+ * @returns {void}
69
+ * @private
70
+ */
71
+ export function rename(parent: IFileManager, path: string, itemNewName: string): void {
72
+ let name: string;
73
+ let newName: string;
74
+ if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {
75
+ name = parent.currentItemText;
76
+ newName = itemNewName;
77
+ } else {
78
+ let fPath: string = parent.filterPath;
79
+ if (parent.hasId) {
80
+ name = parent.currentItemText;
81
+ newName = itemNewName;
82
+ } else {
83
+ fPath = fPath.replace(/\\/g, '/');
84
+ name = fPath.replace(path, '') + parent.currentItemText;
85
+ newName = fPath.replace(path, '') + itemNewName;
86
+ }
87
+ }
88
+ // eslint-disable-next-line
89
+ const data: Object = {
90
+ action: 'rename', path: path, name: name, newName: newName, data: parent.itemData
91
+ };
92
+ createAjax(parent, data, renameSuccess, path);
93
+ }
94
+
95
+
96
+ /**
97
+ * Function to paste file's and folder's in File Manager.
98
+ *
99
+ * @param {IFileManager} parent - specifies the parent element.
100
+ * @param {string} path - specifies the path.
101
+ * @param {string[]} names - specifies the names.
102
+ * @param {string} targetPath - specifies the target path.
103
+ * @param {string} pasteOperation - specifies the paste operation.
104
+ * @param {string[]} renameItems - specifies the rename items.
105
+ * @param {Object[]} actionRecords - specifies the action records.
106
+ * @returns {void}
107
+ * @private
108
+ */
109
+ export function paste(
110
+ parent: IFileManager, path: string, names: string[], targetPath: string, pasteOperation: string,
111
+ // eslint-disable-next-line
112
+ renameItems?: string[], actionRecords?: Object[]): void {
113
+ // eslint-disable-next-line
114
+ const data: Object = {
115
+ action: pasteOperation, path: path, targetData: parent.itemData[0],
116
+ targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords
117
+ };
118
+ parent.destinationPath = targetPath;
119
+ createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);
120
+ }
121
+
122
+ /**
123
+ * Function to delete file's and folder's in File Manager.
124
+ *
125
+ * @param {IFileManager} parent - specifies the parent element.
126
+ * @param {string[]} items - specifies the items.
127
+ * @param {string} path - specifies the path.
128
+ * @param {string} operation - specifies the operation.
129
+ * @returns {void}
130
+ * @private
131
+ */
132
+ export function Delete(parent: IFileManager, items: string[], path: string, operation: string): void {
133
+ // eslint-disable-next-line
134
+ const data: Object = { action: operation, path: path, names: items, data: parent.itemData };
135
+ createAjax(parent, data, deleteSuccess, path);
136
+ }
137
+
138
+ /* istanbul ignore next */
139
+ /**
140
+ * Function to get details of file's and folder's in File Manager.
141
+ *
142
+ * @param {IFileManager} parent - specifies the parent element.
143
+ * @param {string[]} names - specifies the names.
144
+ * @param {string} path - specifies the path.
145
+ * @param {string} operation - specifies the operation data.
146
+ * @returns {void}
147
+ * @private
148
+ */
149
+ export function GetDetails(parent: IFileManager, names: string[], path: string, operation: string): void {
150
+ // eslint-disable-next-line
151
+ const data: Object = { action: operation, path: path, names: names, data: parent.itemData };
152
+ createAjax(parent, data, detailsSuccess, path, operation);
153
+ }
154
+ /**
155
+ * Function for createAjax in File Manager.
156
+ *
157
+ * @param {IFileManager} parent - specifies the parent element.
158
+ * @param {Object} data - specifies the data.
159
+ * @param {Function} fn - specifies the fn.
160
+ * @param {string} event - specifies the event.
161
+ * @param {string} operation - specifies the operation.
162
+ * @param {string} targetPath - specifies the target path.
163
+ * @returns {void}
164
+ * @private
165
+ */
166
+ function createAjax(
167
+ // eslint-disable-next-line
168
+ parent: IFileManager, data: Object, fn: Function, event?: string,
169
+ operation?: string, targetPath?: string): void {
170
+ // eslint-disable-next-line
171
+ const ajaxSettings: Object = {
172
+ url: parent.ajaxSettings.url,
173
+ type: 'POST',
174
+ mode: true,
175
+ dataType: 'json',
176
+ contentType: 'application/json',
177
+ data: JSON.stringify(data),
178
+ onSuccess: null,
179
+ onFailure: null,
180
+ beforeSend: null
181
+ };
182
+ const eventArgs: BeforeSendEventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };
183
+ parent.trigger('beforeSend', eventArgs, (beforeSendArgs: BeforeSendEventArgs) => {
184
+ if (!beforeSendArgs.cancel) {
185
+ parent.notify(events.beforeRequest, {});
186
+ const ajax: Ajax = new Ajax({
187
+ url: getValue('url', beforeSendArgs.ajaxSettings),
188
+ type: getValue('type', beforeSendArgs.ajaxSettings),
189
+ mode: getValue('mode', beforeSendArgs.ajaxSettings),
190
+ dataType: getValue('dataType', beforeSendArgs.ajaxSettings),
191
+ contentType: getValue('contentType', beforeSendArgs.ajaxSettings),
192
+ data: getValue('data', beforeSendArgs.ajaxSettings),
193
+ beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),
194
+ onSuccess: (result: ReadArgs) => {
195
+ if (isNOU(result)) {
196
+ const result: ReadArgs = {
197
+ error: {
198
+ fileExists: null,
199
+ message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,
200
+ code: '406'
201
+ },
202
+ files: null
203
+ };
204
+ triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);
205
+ return;
206
+ }
207
+ if (typeof (result) === 'string') {
208
+ result = JSON.parse(result);
209
+ }
210
+ parent.notify(events.afterRequest, { action: 'success' });
211
+ const id: string = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];
212
+ if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {
213
+ result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;
214
+ setValue('_fm_id', id, result.cwd);
215
+ setValue(id, result.cwd, parent.feParent);
216
+ if (!isNOU(result.files) || result.error.code === '401') {
217
+ if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {
218
+ // eslint-disable-next-line
219
+ const root: Object = getValue(parent.pathId[0], parent.feParent);
220
+ parent.pathNames[0] = getValue('name', root);
221
+ parent.hasId = !isNOU(getValue('id', root));
222
+ }
223
+ if (event === 'finalize-end') {
224
+ generatePath(parent);
225
+ }
226
+ }
227
+ }
228
+ if (!isNOU(result.files)) {
229
+ setDateObject(result.files);
230
+ for (let i: number = 0, len: number = result.files.length; i < len; i++) {
231
+ // eslint-disable-next-line
232
+ const item: Object = result.files[i];
233
+ setValue('_fm_iconClass', fileType(item), item);
234
+ }
235
+ if (getValue('action', data) === 'read') {
236
+ setNodeId(result, id);
237
+ setValue(id, result.files, parent.feFiles);
238
+ }
239
+ }
240
+ if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {
241
+ const rootName: string = parent.rootAliasName || getValue('name', result.details);
242
+ let location: string = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\');
243
+ if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {
244
+ if (getValue('names', data).length === 0) {
245
+ setValue('name', rootName, result.details);
246
+ location = rootName;
247
+ } else {
248
+ location = location.replace(location.substring(0, location.indexOf('\\')), rootName);
249
+ }
250
+ } else {
251
+ location = location.replace(location.substring(0, location.indexOf('\\')), rootName);
252
+ }
253
+ setValue('location', location, result.details);
254
+ }
255
+ fn(parent, result, event, operation, targetPath);
256
+ if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end')) {
257
+ parent.notify(events.searchTextChange, result);
258
+ }
259
+ if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {
260
+ getValue('onSuccess', beforeSendArgs.ajaxSettings)();
261
+ }
262
+ },
263
+ onFailure: () => {
264
+ const result: ReadArgs = {
265
+ files: null,
266
+ error: {
267
+ code: '404',
268
+ message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,
269
+ fileExists: null
270
+ }
271
+ };
272
+ triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);
273
+ }
274
+ });
275
+ ajax.send();
276
+ }
277
+ });
278
+ }
279
+ /**
280
+ * Function for trigger Ajax failure in File Manager.
281
+ *
282
+ * @param {IFileManager} parent - specifies the parent element.
283
+ * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.
284
+ * @param {Function} fn - specifies the function.
285
+ * @param {ReadArgs} result - specifies the result.
286
+ * @param {string} event - specifies the event.
287
+ * @param {string} operation - specifies the operation.
288
+ * @param {string} targetPath - specifies the targetPath.
289
+ * @returns {void}
290
+ * @private
291
+ */
292
+ function triggerAjaxFailure(
293
+ // eslint-disable-next-line
294
+ parent: IFileManager, beforeSendArgs: BeforeSendEventArgs, fn: Function,
295
+ result: ReadArgs, event?: string, operation?: string, targetPath?: string): void {
296
+ parent.notify(events.afterRequest, { action: 'failure' });
297
+ fn(parent, result, event, operation, targetPath);
298
+ if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {
299
+ getValue('onFailure', beforeSendArgs.ajaxSettings)();
300
+ }
301
+ }
302
+ /**
303
+ * Function for read success in File Manager.
304
+ *
305
+ * @param {IFileManager} parent - specifies the parent element.
306
+ * @param {ReadArgs} result - specifies the result.
307
+ * @param {string} event - specifies the event.
308
+ * @returns {void}
309
+ * @private
310
+ */
311
+ function readSuccess(parent: IFileManager, result: ReadArgs, event: string): void {
312
+ if (!isNOU(result.files)) {
313
+ parent.notify(event, result);
314
+ parent.notify(events.selectionChanged, {});
315
+ const args: SuccessEventArgs = { action: 'read', result: result };
316
+ parent.trigger('success', args);
317
+ } else {
318
+ if (result.error.code === '401') {
319
+ result.files = [];
320
+ parent.notify(event, result);
321
+ parent.notify(events.selectionChanged, {});
322
+ }
323
+ onFailure(parent, result, 'read');
324
+ }
325
+ if (parent.isDragDrop && parent.isDropEnd) {
326
+ if (parent.droppedObjects.length !== 0) {
327
+ const args: FileDragEventArgs = { fileDetails: parent.droppedObjects };
328
+ parent.trigger('fileDropped', args);
329
+ }
330
+ parent.isDropEnd = parent.isDragDrop = false;
331
+ }
332
+ }
333
+
334
+ /**
335
+ * Function for filter success in File Manager.
336
+ *
337
+ * @param {IFileManager} parent - specifies the parent element.
338
+ * @param {ReadArgs} result - specifies the result.
339
+ * @param {string} event - specifies the event.
340
+ * @param {string} action - specifies the action.
341
+ * @returns {void}
342
+ * @private
343
+ */
344
+ function filterSuccess(parent: IFileManager, result: ReadArgs, event: string, action: string): void {
345
+ if (!isNOU(result.files)) {
346
+ parent.notify(event, result);
347
+ const args: SuccessEventArgs = { action: action, result: result };
348
+ parent.trigger('success', args);
349
+ } else {
350
+ onFailure(parent, result, action);
351
+ }
352
+ }
353
+
354
+ /* istanbul ignore next */
355
+ /**
356
+ * Function for create success in File Manager.
357
+ *
358
+ * @param {IFileManager} parent - specifies the parent element.
359
+ * @param {ReadArgs} result - specifies the result.
360
+ * @param {string} itemName - specifies the item name.
361
+ * @returns {void}
362
+ * @private
363
+ */
364
+ function createSuccess(parent: IFileManager, result: ReadArgs, itemName: string): void {
365
+ if (!isNOU(result.files)) {
366
+ if (parent.dialogObj && parent.dialogObj.visible) { parent.dialogObj.hide(); }
367
+ parent.createdItem = result.files[0];
368
+ parent.breadcrumbbarModule.searchObj.value = '';
369
+ const args: SuccessEventArgs = { action: 'create', result: result };
370
+ parent.trigger('success', args);
371
+ parent.itemData = [getPathObject(parent)];
372
+ read(parent, events.createEnd, parent.path);
373
+ } else {
374
+ if (result.error.code === '400') {
375
+ if (parent.dialogObj && parent.dialogObj.visible) {
376
+ const ele: HTMLInputElement = select('#newname', parent.dialogObj.element) as HTMLInputElement;
377
+ const error: string = getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '"' + ele.value + '"');
378
+ ele.parentElement.nextElementSibling.innerHTML = error;
379
+ } else {
380
+ const result: ReadArgs = {
381
+ files: null,
382
+ error: {
383
+ code: '400',
384
+ message: getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '"' + itemName + '"'),
385
+ fileExists: null
386
+ }
387
+ };
388
+ createDialog(parent, 'Error', result);
389
+ }
390
+ const args: FailureEventArgs = { action: 'create', error: result.error };
391
+ parent.trigger('failure', args);
392
+ } else {
393
+ if (parent.dialogObj && parent.dialogObj.visible) { parent.dialogObj.hide(); }
394
+ onFailure(parent, result, 'create');
395
+ }
396
+ }
397
+ }
398
+
399
+ /* istanbul ignore next */
400
+ /**
401
+ * Function to rename the folder/file in File Manager.
402
+ *
403
+ * @param {IFileManager} parent - specifies the parent element.
404
+ * @param {ReadArgs} result - specifies the result.
405
+ * @param {string} path - specifies the path
406
+ * @returns {void}
407
+ * @private
408
+ */
409
+ function renameSuccess(parent: IFileManager, result: ReadArgs, path: string): void {
410
+ if (!isNOU(result.files)) {
411
+ if (!isNOU(parent.dialogObj)) { parent.dialogObj.hide(); }
412
+ const args: SuccessEventArgs = { action: 'rename', result: result };
413
+ parent.trigger('success', args);
414
+ parent.renamedItem = result.files[0];
415
+ if (parent.activeModule === 'navigationpane') {
416
+ parent.pathId.pop();
417
+ parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];
418
+ read(parent, events.renameEndParent, getParentPath(parent.path));
419
+ } else {
420
+ parent.itemData = [getPathObject(parent)];
421
+ if (parent.breadcrumbbarModule.searchObj.value !== '') {
422
+ Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);
423
+ } else {
424
+ if (parent.isFiltered) {
425
+ filter(parent, events.renameEnd);
426
+ } else {
427
+ read(parent, events.renameEnd, parent.path);
428
+ }
429
+ }
430
+ }
431
+ } else {
432
+ if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {
433
+ const ele: HTMLInputElement = select('#rename', parent.dialogObj.element) as HTMLInputElement;
434
+ let error: string = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '"' + parent.currentItemText + '"');
435
+ error = error.replace('{1}', '"' + ele.value + '"');
436
+ ele.parentElement.nextElementSibling.innerHTML = error;
437
+ const args: FailureEventArgs = { action: 'rename', error: result.error };
438
+ parent.trigger('failure', args);
439
+ } else {
440
+ if (!isNOU(parent.dialogObj)) { parent.dialogObj.hide(); }
441
+ onFailure(parent, result, 'rename');
442
+ }
443
+ }
444
+ }
445
+
446
+ /* istanbul ignore next */
447
+ /**
448
+ * Function to create new folder in File Manager.
449
+ *
450
+ * @param {IFileManager} parent - specifies the parent element.
451
+ * @param {ReadArgs} result - specifies the result.
452
+ * @param {string} path - specifies the path.
453
+ * @param {string} operation - specifies the operation.
454
+ * @returns {void}
455
+ * @private
456
+ */
457
+ function pasteSuccess(
458
+ parent: IFileManager, result: ReadArgs, path: string, operation: string): void {
459
+ if (result.error && result.error.fileExists) {
460
+ parent.fileLength = 0;
461
+ if (!isNOU(result.files)) {
462
+ parent.isPasteError = true;
463
+ doPasteUpdate(parent, operation, result);
464
+ }
465
+ createExtDialog(parent, 'DuplicateItems', result.error.fileExists);
466
+ if (result.error.code === '404') {
467
+ createDialog(parent, 'Error', result);
468
+ }
469
+ } else if (!result.error && !isNOU(result.files)) {
470
+ parent.isPasteError = false;
471
+ doPasteUpdate(parent, operation, result);
472
+ } else if (result.error && !isNOU(result.files)) {
473
+ parent.isPasteError = true;
474
+ doPasteUpdate(parent, operation, result);
475
+ createDialog(parent, 'Error', result);
476
+ } else {
477
+ onFailure(parent, result, operation);
478
+ }
479
+ }
480
+
481
+ /**
482
+ * Function to delete success in File Manager.
483
+ *
484
+ * @param {IFileManager} parent - specifies the parent element.
485
+ * @param {ReadArgs} result - specifies the result.
486
+ * @param {string} path - specifies the path.
487
+ * @returns {void}
488
+ * @private
489
+ */
490
+ function deleteSuccess(parent: IFileManager, result: ReadArgs, path: string): void {
491
+ if (!isNOU(result.files)) {
492
+ parent.setProperties({ path: path }, true);
493
+ parent.itemData = [getPathObject(parent)];
494
+ read(parent, events.deleteEnd, parent.path);
495
+ if (result.error) {
496
+ onFailure(parent, result, 'delete');
497
+ } else {
498
+ const args: SuccessEventArgs = { action: 'delete', result: result };
499
+ parent.trigger('success', args);
500
+ }
501
+ } else {
502
+ onFailure(parent, result, 'delete');
503
+ }
504
+ }
505
+ /**
506
+ * Function for details success in File Manager.
507
+ *
508
+ * @param {IFileManager} parent - specifies the parent element.
509
+ * @param {ReadArgs} result - specifies the result.
510
+ * @param {string} path - specifies the path.
511
+ * @param {string} operation - specifies the operation.
512
+ * @returns {void}
513
+ * @private
514
+ */
515
+ function detailsSuccess(
516
+ // eslint:disable-next-line
517
+ parent: IFileManager, result: ReadArgs, path: string, operation: string): void {
518
+ if (!isNOU(result.details)) {
519
+ createDialog(parent, operation, null, <FileDetails>result.details);
520
+ const args: SuccessEventArgs = { action: 'details', result: result };
521
+ parent.trigger('success', args);
522
+ } else {
523
+ onFailure(parent, result, 'details');
524
+ }
525
+ }
526
+ /**
527
+ * Function for on failure event in File Manager.
528
+ *
529
+ * @param {IFileManager} parent - specifies the parent element.
530
+ * @param {ReadArgs} result - specifies the result.
531
+ * @param {string} action - specifies the action.
532
+ * @returns {void}
533
+ * @private
534
+ */
535
+ function onFailure(parent: IFileManager, result: ReadArgs, action: string): void {
536
+ createDialog(parent, 'Error', result);
537
+ const args: FailureEventArgs = { action: action, error: result.error };
538
+ parent.trigger('failure', args);
539
+ }
540
+ /**
541
+ * Function for search in File Manager.
542
+ *
543
+ * @param {IFileManager} parent - specifies the parent element.
544
+ * @param {string} event - specifies the event.
545
+ * @param {string} path - specifies the path.
546
+ * @param {string} searchString - specifies the search string.
547
+ * @param {boolean} showHiddenItems - specifies the hidden items.
548
+ * @param {boolean} caseSensitive - specifies the casing of search text.
549
+ * @returns {void}
550
+ * @private
551
+ */
552
+ export function Search(
553
+ // eslint:disable-next-line
554
+ parent: IFileManager, event: string, path: string, searchString: string, showHiddenItems?: boolean, caseSensitive?: boolean): void {
555
+ // eslint-disable-next-line
556
+ const data: Object = {
557
+ action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,
558
+ data: parent.itemData
559
+ };
560
+ createAjax(parent, data, searchSuccess, event);
561
+ }
562
+
563
+ /* istanbul ignore next */
564
+ /**
565
+ * Function for search success in File Manager.
566
+ *
567
+ * @param {IFileManager} parent - specifies the parent element.
568
+ * @param {ReadArgs} result - specifies the result.
569
+ * @param {string} event - specifies the event.
570
+ * @returns {void}
571
+ * @private
572
+ */
573
+ function searchSuccess(parent: IFileManager, result: ReadArgs, event: string): void {
574
+ if (!isNOU(result.files)) {
575
+ parent.notify(event, result);
576
+ const args: SuccessEventArgs = { action: 'search', result: result };
577
+ parent.trigger('success', args);
578
+ } else {
579
+ onFailure(parent, result, 'search');
580
+ }
581
+ }
582
+ /* istanbul ignore next */
583
+ /**
584
+ * Function for download in File Manager.
585
+ *
586
+ * @param {IFileManager} parent - specifies the parent element.
587
+ * @param {string} path - specifies the path.
588
+ * @param {string[]} items - specifies the items.
589
+ * @returns {void}
590
+ * @private
591
+ */
592
+ export function Download(parent: IFileManager, path: string, items: string[]): void {
593
+ const downloadUrl: string = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;
594
+ // eslint-disable-next-line
595
+ const data: Object = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };
596
+ const eventArgs: BeforeDownloadEventArgs = { data: data, cancel: false };
597
+ parent.trigger('beforeDownload', eventArgs, (downloadArgs: BeforeDownloadEventArgs) => {
598
+ if (!downloadArgs.cancel) {
599
+ const form: HTMLElement = createElement('form', {
600
+ id: parent.element.id + '_downloadForm',
601
+ attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }
602
+ });
603
+ const input: HTMLElement =
604
+ createElement('input', {
605
+ id: parent.element.id + '_hiddenForm',
606
+ attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }
607
+ });
608
+ form.appendChild(input);
609
+ parent.element.appendChild(form);
610
+ document.forms.namedItem('downloadForm').submit();
611
+ parent.element.removeChild(form);
612
+ }
613
+ });
614
+ }