@syncfusion/ej2-filemanager 19.4.56 → 20.1.52-10459

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 (208) hide show
  1. package/.eslintrc.json +20 -3
  2. package/README.md +54 -43
  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 +2371 -664
  7. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  8. package/dist/es6/ej2-filemanager.es5.js +2440 -714
  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/helpers/e2e/filemanagerHelper.js +183 -166
  14. package/package.json +71 -71
  15. package/src/file-manager/actions/breadcrumb-bar.js +1 -5
  16. package/src/file-manager/actions/index.d.ts +1 -0
  17. package/src/file-manager/actions/index.js +1 -0
  18. package/src/file-manager/actions/toolbar.d.ts +1 -0
  19. package/src/file-manager/actions/toolbar.js +135 -20
  20. package/src/file-manager/actions/virtualization.d.ts +93 -0
  21. package/src/file-manager/actions/virtualization.js +279 -0
  22. package/src/file-manager/base/file-manager-model.d.ts +161 -28
  23. package/src/file-manager/base/file-manager.d.ts +182 -28
  24. package/src/file-manager/base/file-manager.js +254 -29
  25. package/src/file-manager/base/interface.d.ts +329 -3
  26. package/src/file-manager/base/interface.js +0 -1
  27. package/src/file-manager/common/operations.d.ts +7 -0
  28. package/src/file-manager/common/operations.js +830 -185
  29. package/src/file-manager/common/utility.d.ts +46 -3
  30. package/src/file-manager/common/utility.js +249 -73
  31. package/src/file-manager/index.d.ts +1 -0
  32. package/src/file-manager/index.js +1 -0
  33. package/src/file-manager/layout/details-view.d.ts +10 -0
  34. package/src/file-manager/layout/details-view.js +204 -94
  35. package/src/file-manager/layout/large-icons-view.d.ts +4 -2
  36. package/src/file-manager/layout/large-icons-view.js +122 -73
  37. package/src/file-manager/layout/navigation-pane.d.ts +2 -0
  38. package/src/file-manager/layout/navigation-pane.js +97 -73
  39. package/src/file-manager/models/column-model.d.ts +23 -5
  40. package/src/file-manager/models/column.d.ts +21 -2
  41. package/src/file-manager/models/column.js +6 -0
  42. package/src/file-manager/models/default-locale.js +0 -1
  43. package/src/file-manager/models/details-view-settings-model.d.ts +1 -1
  44. package/src/file-manager/models/details-view-settings.js +8 -3
  45. package/src/file-manager/models/navigation-pane-settings.d.ts +8 -8
  46. package/src/file-manager/models/search-settings.d.ts +5 -0
  47. package/src/file-manager/models/toolbar-settings-model.d.ts +177 -2
  48. package/src/file-manager/models/toolbar-settings.d.ts +157 -2
  49. package/src/file-manager/models/toolbar-settings.js +64 -2
  50. package/src/file-manager/models/upload-settings-model.d.ts +13 -0
  51. package/src/file-manager/models/upload-settings.d.ts +12 -0
  52. package/src/file-manager/models/upload-settings.js +3 -0
  53. package/src/file-manager/pop-up/context-menu.d.ts +2 -1
  54. package/src/file-manager/pop-up/context-menu.js +111 -36
  55. package/src/file-manager/pop-up/dialog.d.ts +1 -2
  56. package/src/file-manager/pop-up/dialog.js +19 -40
  57. package/src/global.js +1 -1
  58. package/styles/bootstrap-dark-lite.css +1058 -0
  59. package/styles/bootstrap-dark-lite.scss +16 -0
  60. package/styles/bootstrap-dark.css +371 -665
  61. package/styles/bootstrap-dark.scss +17 -1
  62. package/styles/bootstrap-lite.css +1040 -0
  63. package/styles/bootstrap-lite.scss +16 -0
  64. package/styles/bootstrap.css +353 -644
  65. package/styles/bootstrap.scss +17 -1
  66. package/styles/bootstrap4-lite.css +1068 -0
  67. package/styles/bootstrap4-lite.scss +16 -0
  68. package/styles/bootstrap4.css +381 -680
  69. package/styles/bootstrap4.scss +17 -1
  70. package/styles/bootstrap5-dark-lite.css +1078 -0
  71. package/styles/bootstrap5-dark-lite.scss +16 -0
  72. package/styles/bootstrap5-dark.css +377 -695
  73. package/styles/bootstrap5-dark.scss +17 -1
  74. package/styles/bootstrap5-lite.css +1078 -0
  75. package/styles/bootstrap5-lite.scss +16 -0
  76. package/styles/bootstrap5.3-lite.css +1035 -0
  77. package/styles/bootstrap5.3-lite.scss +16 -0
  78. package/styles/bootstrap5.3.css +1603 -0
  79. package/styles/bootstrap5.3.scss +17 -0
  80. package/styles/bootstrap5.css +377 -695
  81. package/styles/bootstrap5.scss +17 -1
  82. package/styles/fabric-dark-lite.css +1039 -0
  83. package/styles/fabric-dark-lite.scss +16 -0
  84. package/styles/fabric-dark.css +358 -642
  85. package/styles/fabric-dark.scss +17 -1
  86. package/styles/fabric-lite.css +1039 -0
  87. package/styles/fabric-lite.scss +16 -0
  88. package/styles/fabric.css +357 -641
  89. package/styles/fabric.scss +17 -1
  90. package/styles/file-manager/_all.scss +1 -1
  91. package/styles/file-manager/_bds-definition.scss +236 -0
  92. package/styles/file-manager/_bigger.scss +758 -0
  93. package/styles/file-manager/_bootstrap-dark-definition.scss +6 -2
  94. package/styles/file-manager/_bootstrap-definition.scss +6 -2
  95. package/styles/file-manager/_bootstrap4-definition.scss +6 -2
  96. package/styles/file-manager/_bootstrap5-definition.scss +21 -16
  97. package/styles/file-manager/_bootstrap5.3-definition.scss +242 -0
  98. package/styles/file-manager/_fabric-dark-definition.scss +6 -2
  99. package/styles/file-manager/_fabric-definition.scss +6 -2
  100. package/styles/file-manager/_fluent-dark-definition.scss +1 -0
  101. package/styles/file-manager/_fluent-definition.scss +26 -22
  102. package/styles/file-manager/_fluent2-definition.scss +255 -0
  103. package/styles/file-manager/_fusionnew-definition.scss +241 -0
  104. package/styles/file-manager/_highcontrast-definition.scss +6 -2
  105. package/styles/file-manager/_highcontrast-light-definition.scss +6 -2
  106. package/styles/file-manager/_layout.scss +373 -912
  107. package/styles/file-manager/_material-dark-definition.scss +7 -2
  108. package/styles/file-manager/_material-definition.scss +7 -2
  109. package/styles/file-manager/_material3-dark-definition.scss +1 -0
  110. package/styles/file-manager/_material3-definition.scss +235 -0
  111. package/styles/file-manager/_tailwind-definition.scss +20 -16
  112. package/styles/file-manager/_theme.scss +130 -99
  113. package/styles/file-manager/bootstrap-dark.css +371 -665
  114. package/styles/file-manager/bootstrap-dark.scss +2 -1
  115. package/styles/file-manager/bootstrap.css +353 -644
  116. package/styles/file-manager/bootstrap.scss +2 -1
  117. package/styles/file-manager/bootstrap4.css +381 -680
  118. package/styles/file-manager/bootstrap4.scss +2 -1
  119. package/styles/file-manager/bootstrap5-dark.css +377 -695
  120. package/styles/file-manager/bootstrap5-dark.scss +2 -1
  121. package/styles/file-manager/bootstrap5.3.css +1603 -0
  122. package/styles/file-manager/bootstrap5.3.scss +17 -0
  123. package/styles/file-manager/bootstrap5.css +377 -695
  124. package/styles/file-manager/bootstrap5.scss +2 -1
  125. package/styles/file-manager/fabric-dark.css +358 -642
  126. package/styles/file-manager/fabric-dark.scss +2 -1
  127. package/styles/file-manager/fabric.css +357 -641
  128. package/styles/file-manager/fabric.scss +2 -1
  129. package/styles/file-manager/fluent-dark.css +1616 -0
  130. package/styles/file-manager/fluent-dark.scss +17 -0
  131. package/styles/file-manager/fluent.css +1615 -0
  132. package/styles/file-manager/fluent.scss +17 -0
  133. package/styles/file-manager/fluent2.css +1886 -0
  134. package/styles/file-manager/fluent2.scss +17 -0
  135. package/styles/file-manager/highcontrast-light.css +354 -644
  136. package/styles/file-manager/highcontrast-light.scss +2 -1
  137. package/styles/file-manager/highcontrast.css +377 -647
  138. package/styles/file-manager/highcontrast.scss +2 -1
  139. package/styles/file-manager/icons/_bds.scss +235 -0
  140. package/styles/file-manager/icons/_bootstrap.scss +0 -1
  141. package/styles/file-manager/icons/_bootstrap4.scss +0 -1
  142. package/styles/file-manager/icons/_bootstrap5.3.scss +235 -0
  143. package/styles/file-manager/icons/_fabric-dark.scss +0 -1
  144. package/styles/file-manager/icons/_fabric.scss +0 -1
  145. package/styles/file-manager/icons/_fluent-dark.scss +1 -0
  146. package/styles/file-manager/icons/_fluent.scss +19 -19
  147. package/styles/file-manager/icons/_fluent2.scss +235 -0
  148. package/styles/file-manager/icons/_fusionnew.scss +235 -0
  149. package/styles/file-manager/icons/_material3-dark.scss +1 -0
  150. package/styles/file-manager/icons/_material3.scss +235 -0
  151. package/styles/file-manager/icons/_tailwind.scss +49 -49
  152. package/styles/file-manager/material-dark.css +392 -671
  153. package/styles/file-manager/material-dark.scss +2 -1
  154. package/styles/file-manager/material.css +391 -654
  155. package/styles/file-manager/material.scss +2 -1
  156. package/styles/file-manager/material3-dark.css +1633 -0
  157. package/styles/file-manager/material3-dark.scss +18 -0
  158. package/styles/file-manager/material3.css +1635 -0
  159. package/styles/file-manager/material3.scss +18 -0
  160. package/styles/file-manager/tailwind-dark.css +369 -686
  161. package/styles/file-manager/tailwind-dark.scss +2 -1
  162. package/styles/file-manager/tailwind.css +369 -686
  163. package/styles/file-manager/tailwind.scss +2 -1
  164. package/styles/fluent-dark-lite.css +1037 -0
  165. package/styles/fluent-dark-lite.scss +16 -0
  166. package/styles/fluent-dark.css +1616 -0
  167. package/styles/fluent-dark.scss +17 -0
  168. package/styles/fluent-lite.css +1036 -0
  169. package/styles/fluent-lite.scss +16 -0
  170. package/styles/fluent.css +1615 -0
  171. package/styles/fluent.scss +17 -0
  172. package/styles/fluent2-lite.css +1272 -0
  173. package/styles/fluent2-lite.scss +16 -0
  174. package/styles/fluent2.css +1886 -0
  175. package/styles/fluent2.scss +17 -0
  176. package/styles/highcontrast-light-lite.css +1039 -0
  177. package/styles/highcontrast-light-lite.scss +16 -0
  178. package/styles/highcontrast-light.css +354 -644
  179. package/styles/highcontrast-light.scss +17 -1
  180. package/styles/highcontrast-lite.css +1059 -0
  181. package/styles/highcontrast-lite.scss +16 -0
  182. package/styles/highcontrast.css +377 -647
  183. package/styles/highcontrast.scss +17 -1
  184. package/styles/material-dark-lite.css +1092 -0
  185. package/styles/material-dark-lite.scss +16 -0
  186. package/styles/material-dark.css +392 -671
  187. package/styles/material-dark.scss +17 -1
  188. package/styles/material-lite.css +1097 -0
  189. package/styles/material-lite.scss +16 -0
  190. package/styles/material.css +391 -654
  191. package/styles/material.scss +17 -1
  192. package/styles/material3-dark-lite.css +1090 -0
  193. package/styles/material3-dark-lite.scss +16 -0
  194. package/styles/material3-dark.css +1633 -0
  195. package/styles/material3-dark.scss +19 -0
  196. package/styles/material3-lite.css +1092 -0
  197. package/styles/material3-lite.scss +16 -0
  198. package/styles/material3.css +1635 -0
  199. package/styles/material3.scss +19 -0
  200. package/styles/tailwind-dark-lite.css +1060 -0
  201. package/styles/tailwind-dark-lite.scss +16 -0
  202. package/styles/tailwind-dark.css +369 -686
  203. package/styles/tailwind-dark.scss +17 -1
  204. package/styles/tailwind-lite.css +1060 -0
  205. package/styles/tailwind-lite.scss +16 -0
  206. package/styles/tailwind.css +369 -686
  207. package/styles/tailwind.scss +17 -1
  208. package/CHANGELOG.md +0 -466
@@ -1,10 +1,47 @@
1
1
  import * as CLS from '../base/classes';
2
2
  import * as events from '../base/constant';
3
- import { read, paste, Search, filter, Download, Delete } from '../common/operations';
4
- import { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement } from '@syncfusion/ej2-base';
3
+ import { read, paste, Search, filter, Download, Delete, isFileSystemData } from '../common/operations';
4
+ import { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';
5
5
  import { closest, detach } from '@syncfusion/ej2-base';
6
6
  import { DataManager, Query } from '@syncfusion/ej2-data';
7
7
  import { createDialog } from '../pop-up/dialog';
8
+ /**
9
+ * Utility function to compare two strings in a way similar to Windows Explorer.
10
+ * Files and folders are sorted separately, with folders coming before files.
11
+ *
12
+ * @param {string} reference - The first string to compare. This could be a file or folder name.
13
+ * @param {string} comparer - The second string to compare. This could be a file or folder name.
14
+ * @returns {number} - A negative number if `reference` should come before `comparer`, a positive number if `comparer` should come before `reference`, and 0 if they are considered equal.
15
+ */
16
+ export function sortComparer(reference, comparer) {
17
+ // Check if reference and comparer are files or folders
18
+ var referenceIsFile = /\.\S+/.test(reference);
19
+ var comparerIsFile = /\.\S+/.test(comparer);
20
+ // If one is a file and the other is a folder, the folder should come first
21
+ if (referenceIsFile && !comparerIsFile) {
22
+ return 1;
23
+ }
24
+ if (!referenceIsFile && comparerIsFile) {
25
+ return -1;
26
+ }
27
+ var referenceParts = [];
28
+ var comparerParts = [];
29
+ (reference + '').replace(/(\d+)|(\D+)/g, function (_, $1, $2) { referenceParts.push([$1 || Infinity, $2 || '']); return ''; });
30
+ (comparer + '').replace(/(\d+)|(\D+)/g, function (_, $1, $2) { comparerParts.push([$1 || Infinity, $2 || '']); return ''; });
31
+ // Compare each part of reference and comparer
32
+ while (referenceParts.length && comparerParts.length) {
33
+ var referencePart = referenceParts.shift();
34
+ var comparerPart = comparerParts.shift();
35
+ if (referencePart && comparerPart) {
36
+ var comparisonResult = referencePart[0] - comparerPart[0] ||
37
+ referencePart[1].localeCompare(comparerPart[1]);
38
+ if (comparisonResult) {
39
+ return comparisonResult;
40
+ }
41
+ }
42
+ }
43
+ return referenceParts.length - comparerParts.length;
44
+ }
8
45
  /**
9
46
  * Utility file for common actions
10
47
  *
@@ -14,7 +51,6 @@ import { createDialog } from '../pop-up/dialog';
14
51
  * @returns {void}
15
52
  * @private
16
53
  */
17
- // eslint-disable-next-line
18
54
  export function updatePath(node, data, instance) {
19
55
  var text = getValue('name', data);
20
56
  var id = node.getAttribute('data-id');
@@ -34,8 +70,8 @@ export function updatePath(node, data, instance) {
34
70
  */
35
71
  export function getPath(element, text, hasId) {
36
72
  var matched = getParents(element, text, false, hasId);
37
- var path = hasId ? '' : '/';
38
- var len = matched.length - (hasId ? 1 : 2);
73
+ var path = '/';
74
+ var len = matched.length - (2);
39
75
  for (var i = len; i >= 0; i--) {
40
76
  path += matched[i] + '/';
41
77
  }
@@ -107,11 +143,10 @@ export function getParents(element, text, isId, hasId) {
107
143
  */
108
144
  export function generatePath(parent) {
109
145
  var key = parent.hasId ? 'id' : 'name';
110
- var newPath = parent.hasId ? '' : '/';
111
- var i = parent.hasId ? 0 : 1;
146
+ var newPath = '/';
147
+ var i = 1;
112
148
  for (i; i < parent.pathId.length; i++) {
113
- // eslint-disable-next-line
114
- var data = getValue(parent.pathId[i], parent.feParent);
149
+ var data = getValue(parent.pathId[parseInt(i.toString(), 10)], parent.feParent);
115
150
  newPath += getValue(key, data) + '/';
116
151
  }
117
152
  parent.setProperties({ path: newPath }, true);
@@ -249,6 +284,22 @@ export function searchWordHandler(parent, value, isLayoutChange) {
249
284
  if (value.length === 0 && !parent.isFiltered) {
250
285
  parent.notify(events.pathColumn, { args: parent });
251
286
  }
287
+ if (isFileSystemData(parent)) {
288
+ if (value === '') {
289
+ parent.itemData = parent.fileSystemData;
290
+ read(parent, events.layoutChange, parent.path);
291
+ }
292
+ else {
293
+ parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;
294
+ var filteredData = parent.fileSystemData.filter(function (obj) { return obj.parentId !== null; });
295
+ var data = new DataManager(filteredData).
296
+ executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));
297
+ var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;
298
+ parent.itemData = data;
299
+ Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchValue, parent.showHiddenItems, !parent.searchSettings.ignoreCase);
300
+ }
301
+ return;
302
+ }
252
303
  if (parent.searchSettings.filterType === 'startsWith') {
253
304
  searchWord = value + '*';
254
305
  }
@@ -268,7 +319,7 @@ export function searchWordHandler(parent, value, isLayoutChange) {
268
319
  else {
269
320
  if (!parent.isFiltered) {
270
321
  if (parent.isSortByClicked) {
271
- parent.notify(events.layoutChange, { files: parent.largeiconsviewModule.items });
322
+ parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });
272
323
  parent.isSortByClicked = false;
273
324
  }
274
325
  else {
@@ -289,6 +340,7 @@ export function searchWordHandler(parent, value, isLayoutChange) {
289
340
  * @private
290
341
  */
291
342
  export function updateLayout(parent, view) {
343
+ parent.oldView = parent.view;
292
344
  parent.setProperties({ view: view }, true);
293
345
  if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {
294
346
  parent.layoutSelectedItems = parent.selectedItems;
@@ -365,7 +417,6 @@ export function openAction(parent) {
365
417
  * @returns {Object} - returns the path data.
366
418
  * @private
367
419
  */
368
- // eslint-disable-next-line
369
420
  export function getPathObject(parent) {
370
421
  return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);
371
422
  }
@@ -407,7 +458,6 @@ export function cutFiles(parent) {
407
458
  * @returns {string} - returns the file type.
408
459
  * @private
409
460
  */
410
- // eslint-disable-next-line
411
461
  export function fileType(file) {
412
462
  var isFile = getValue('isFile', file);
413
463
  if (!isFile) {
@@ -450,21 +500,29 @@ export function fileType(file) {
450
500
  * @returns {string} - returns the image url.
451
501
  * @private
452
502
  */
453
- // eslint-disable-next-line
454
503
  export function getImageUrl(parent, item) {
504
+ var imgUrl = isFileSystemData(parent) ? getValue('imageUrl', item) : '';
505
+ if (isFileSystemData(parent)) {
506
+ var eventArgs_1 = {
507
+ fileDetails: [item],
508
+ imageUrl: imgUrl
509
+ };
510
+ parent.trigger('beforeImageLoad', eventArgs_1);
511
+ return eventArgs_1.imageUrl;
512
+ }
455
513
  var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;
456
- var imgUrl;
514
+ var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';
457
515
  var fileName = encodeURIComponent(getValue('name', item));
458
516
  var fPath = getValue('filterPath', item);
459
517
  if (parent.hasId) {
460
518
  var imgId = getValue('id', item);
461
- imgUrl = baseUrl + '?path=' + parent.path + '&id=' + imgId;
519
+ imgUrl = baseUrl + pathUrl + parent.path + '&id=' + imgId;
462
520
  }
463
521
  else if (!isNOU(fPath)) {
464
- imgUrl = baseUrl + '?path=' + fPath.replace(/\\/g, '/') + fileName;
522
+ imgUrl = baseUrl + pathUrl + encodeURIComponent(fPath.replace(/\\/g, '/')) + fileName;
465
523
  }
466
524
  else {
467
- imgUrl = baseUrl + '?path=' + parent.path + fileName;
525
+ imgUrl = baseUrl + pathUrl + parent.path + fileName;
468
526
  }
469
527
  imgUrl = imgUrl + '&time=' + (new Date().getTime()).toString();
470
528
  var eventArgs = {
@@ -484,7 +542,6 @@ export function getImageUrl(parent, item) {
484
542
  * @returns {string} - returns the image url.
485
543
  * @private
486
544
  */
487
- // eslint-disable-next-line
488
545
  export function getFullPath(parent, data, path) {
489
546
  var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';
490
547
  var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);
@@ -503,7 +560,6 @@ export function getFullPath(parent, data, path) {
503
560
  * @returns {string} - returns the name.
504
561
  * @private
505
562
  */
506
- // eslint-disable-next-line
507
563
  export function getName(parent, data) {
508
564
  var name = getValue('name', data);
509
565
  var fPath = getValue('filterPath', data);
@@ -521,19 +577,17 @@ export function getName(parent, data) {
521
577
  * @returns {Object[]} - returns the sorted data.
522
578
  * @private
523
579
  */
524
- // eslint-disable-next-line
525
580
  export function getSortedData(parent, items) {
526
581
  if (items.length === 0) {
527
582
  return items;
528
583
  }
529
584
  var query;
530
- if (parent.sortOrder !== 'None') {
585
+ if (parent.sortOrder !== 'None' && !isNullOrUndefined(parent.sortOrder)) {
531
586
  query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');
532
587
  }
533
588
  else {
534
589
  query = new Query().group('isFile');
535
590
  }
536
- // eslint-disable-next-line
537
591
  var lists = new DataManager(items).executeLocal(query);
538
592
  return getValue('records', lists);
539
593
  }
@@ -546,12 +600,9 @@ export function getSortedData(parent, items) {
546
600
  * @returns {Object} - returns the sorted data.
547
601
  * @private
548
602
  */
549
- // eslint-disable-next-line
550
603
  export function getObject(parent, key, value) {
551
- // eslint-disable-next-line
552
604
  var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);
553
605
  var query = new Query().where(key, 'equal', value);
554
- // eslint-disable-next-line
555
606
  var lists = new DataManager(currFiles).executeLocal(query);
556
607
  return lists[0];
557
608
  }
@@ -616,7 +667,6 @@ export function createEmptyElement(parent, element, args) {
616
667
  * @returns {Object[]} - returns the sorted data.
617
668
  * @private
618
669
  */
619
- // eslint-disable-next-line
620
670
  export function getDirectories(files) {
621
671
  return new DataManager(files).executeLocal(new Query().where(events.isFile, 'equal', false, false));
622
672
  }
@@ -629,7 +679,6 @@ export function getDirectories(files) {
629
679
  * @private
630
680
  */
631
681
  export function setNodeId(result, rootId) {
632
- // eslint-disable-next-line
633
682
  var dirs = getDirectories(result.files);
634
683
  for (var i = 0, len = dirs.length; i < len; i++) {
635
684
  setValue('_fm_id', rootId + '_' + i, dirs[i]);
@@ -639,14 +688,20 @@ export function setNodeId(result, rootId) {
639
688
  * set the date object
640
689
  *
641
690
  * @param {Object[]} args - specifies the file object.
691
+ * @param {Internationalization} localeString - The internationalization object for formatting dates.
692
+ * @param {string} dateFormat - The date format string.
642
693
  * @returns {void}
643
694
  * @private
644
695
  */
645
- // eslint-disable-next-line
646
- export function setDateObject(args) {
696
+ export function setDateObject(args, localeString, dateFormat) {
647
697
  for (var i = 0; i < args.length; i++) {
648
- setValue('_fm_created', new Date(getValue('dateCreated', args[i])), args[i]);
649
- setValue('_fm_modified', new Date(getValue('dateModified', args[i])), args[i]);
698
+ var createdDate = new Date(getValue('dateCreated', args[i]));
699
+ var modifiedDate = new Date(getValue('dateModified', args[i]));
700
+ if (isNOU(dateFormat)) {
701
+ dateFormat = 'MM/dd/yyyy';
702
+ }
703
+ setValue('_fm_created', localeString.formatDate(createdDate, { format: dateFormat }), args[i]);
704
+ setValue('_fm_modified', localeString.formatDate(modifiedDate, { format: dateFormat }), args[i]);
650
705
  }
651
706
  }
652
707
  /**
@@ -692,7 +747,7 @@ export function sortbyClickHandler(parent, args) {
692
747
  tick = false;
693
748
  }
694
749
  if (!tick) {
695
- parent.sortBy = getSortField(args.item.id);
750
+ parent.sortBy = getSortField(args.item.id, parent);
696
751
  }
697
752
  else {
698
753
  parent.sortOrder = getSortField(args.item.id);
@@ -704,6 +759,7 @@ export function sortbyClickHandler(parent, args) {
704
759
  }
705
760
  else {
706
761
  parent.notify(events.sortColumn, { module: 'detailsview' });
762
+ parent.isSortByClicked = false;
707
763
  }
708
764
  }
709
765
  if (parent.view === 'LargeIcons') {
@@ -715,15 +771,28 @@ export function sortbyClickHandler(parent, args) {
715
771
  * Gets the sorted fields
716
772
  *
717
773
  * @param {string} id - specifies the id.
774
+ * @param {IFileManager} [parent] - optional parameter representing the parent IFileManager.
718
775
  * @returns {string} - returns the sorted fields
719
776
  * @private
720
777
  */
721
- export function getSortField(id) {
778
+ export function getSortField(id, parent) {
722
779
  var text = id.substring(id.lastIndexOf('_') + 1);
723
780
  var field = text;
781
+ var column;
782
+ if (parent) {
783
+ column = parent.detailsViewSettings.columns;
784
+ }
724
785
  switch (text) {
725
786
  case 'date':
726
- field = '_fm_modified';
787
+ for (var i = 0, len = column.length; i < len; i++) {
788
+ if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {
789
+ field = column[i].field;
790
+ break;
791
+ }
792
+ else {
793
+ field = '_fm_modified';
794
+ }
795
+ }
727
796
  break;
728
797
  case 'ascending':
729
798
  field = 'Ascending';
@@ -748,19 +817,22 @@ export function getSortField(id) {
748
817
  export function setNextPath(parent, path) {
749
818
  var currfolders = path.split('/');
750
819
  var folders = parent.originalPath.split('/');
751
- // eslint-disable-next-line
752
820
  var root = getValue(parent.pathId[0], parent.feParent);
753
821
  var key = isNOU(getValue('id', root)) ? 'name' : 'id';
754
822
  for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {
755
823
  var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;
756
824
  var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');
757
- // eslint-disable-next-line
758
- var data = getObject(parent, key, folders[i]);
759
- var id = getValue('_fm_id', data);
760
- parent.setProperties({ path: newPath }, true);
761
- parent.pathId.push(id);
762
- parent.itemData = [data];
763
- parent.pathNames.push(getValue('name', data));
825
+ var data = getObject(parent, key, folders[parseInt(i.toString(), 10)]);
826
+ if (!isNullOrUndefined(data)) {
827
+ var id = getValue('_fm_id', data);
828
+ parent.setProperties({ path: newPath }, true);
829
+ parent.pathId.push(id);
830
+ parent.itemData = [data];
831
+ parent.pathNames.push(getValue('name', data));
832
+ }
833
+ else {
834
+ parent.originalPath = newPath;
835
+ }
764
836
  read(parent, eventName, parent.path);
765
837
  break;
766
838
  }
@@ -773,10 +845,28 @@ export function setNextPath(parent, path) {
773
845
  * @returns {void}
774
846
  * @private
775
847
  */
776
- // eslint-disable-next-line
777
848
  export function openSearchFolder(parent, data) {
778
- parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });
779
849
  parent.originalPath = getFullPath(parent, data, parent.path);
850
+ var root = getValue(parent.pathId[0], parent.feParent);
851
+ var isRoot = getValue('_fm_id', parent.itemData[0]) === 'fe_tree';
852
+ var key = isNOU(getValue('id', root)) ? 'name' : 'id';
853
+ var searchData = getObject(parent, key, isFileSystemData(parent) ? getValue('id', data) : getValue('name', data));
854
+ if (isNullOrUndefined(searchData)) {
855
+ if (!isRoot) {
856
+ parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });
857
+ }
858
+ else {
859
+ setNextPath(parent, parent.path);
860
+ return;
861
+ }
862
+ }
863
+ else {
864
+ var id = getValue('_fm_id', searchData);
865
+ parent.setProperties({ path: parent.originalPath }, true);
866
+ parent.pathId.push(id);
867
+ parent.itemData = [searchData];
868
+ parent.pathNames.push(getValue('name', searchData));
869
+ }
780
870
  read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);
781
871
  }
782
872
  /**
@@ -790,7 +880,9 @@ export function pasteHandler(parent) {
790
880
  parent.isDragDrop = false;
791
881
  if (parent.selectedNodes.length !== 0 && parent.enablePaste) {
792
882
  var path = (parent.folderPath === '') ? parent.path : parent.folderPath;
793
- // eslint-disable-next-line
883
+ if (parent.activeModule === 'navigationpane' && !parent.selectedNodes[0].includes('/')) {
884
+ parent.targetPath = getValue('filterPath', parent.actionRecords[0]).replace(/\\/g, '/');
885
+ }
794
886
  var subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);
795
887
  if (!subFolder) {
796
888
  if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {
@@ -801,6 +893,15 @@ export function pasteHandler(parent) {
801
893
  parent.enablePaste = false;
802
894
  parent.notify(events.hidePaste, {});
803
895
  removeBlur(parent);
896
+ var result = {
897
+ files: null,
898
+ error: {
899
+ code: '402',
900
+ message: getLocaleText(parent, 'Same-Folder-Error'),
901
+ fileExists: null
902
+ }
903
+ };
904
+ createDialog(parent, 'Error', result);
804
905
  }
805
906
  }
806
907
  }
@@ -815,7 +916,6 @@ export function pasteHandler(parent) {
815
916
  * @returns {boolean} - returns the validated sub folder.
816
917
  * @private
817
918
  */
818
- // eslint-disable-next-line
819
919
  export function validateSubFolder(parent, data, dropPath, dragPath) {
820
920
  var subFolder = false;
821
921
  for (var i = 0; i < data.length; i++) {
@@ -836,7 +936,8 @@ export function validateSubFolder(parent, data, dropPath, dragPath) {
836
936
  }
837
937
  }
838
938
  else {
839
- var srcData = parent.dragNodes[i];
939
+ var name_1 = parent.dragData[i] ? parent.dragData[i].name : null;
940
+ var srcData = isFileSystemData(parent) ? name_1 : parent.dragNodes[i];
840
941
  var len = 0;
841
942
  if (srcData) {
842
943
  len = srcData.lastIndexOf('/');
@@ -907,15 +1008,15 @@ export function getParentPath(oldPath) {
907
1008
  */
908
1009
  export function getDirectoryPath(parent, args) {
909
1010
  var filePath = getValue(parent.hasId ? 'id' : 'name', args.cwd) + '/';
910
- var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', args.cwd);
1011
+ var fPath = getValue(parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? 'filterId' : 'filterPath', args.cwd);
911
1012
  if (!isNOU(fPath)) {
912
1013
  if (fPath === '') {
913
- return parent.hasId ? filePath : '/';
1014
+ return parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? filePath : '/';
914
1015
  }
915
1016
  return fPath.replace(/\\/g, '/') + filePath;
916
1017
  }
917
1018
  else {
918
- return parent.path + filePath;
1019
+ return isFileSystemData(parent) ? filePath : parent.path + filePath;
919
1020
  }
920
1021
  }
921
1022
  /**
@@ -983,6 +1084,11 @@ export function readDropPath(parent) {
983
1084
  else {
984
1085
  if (parent.navigationpaneModule) {
985
1086
  var node = select('[data-uid="' + pathId + '"]', parent.navigationpaneModule.treeObj.element);
1087
+ if (!node) {
1088
+ var liElement = document.querySelector('[data-id = "' + getValue('id', parent.dropData) + '"]');
1089
+ pathId = liElement.getAttribute('data-uid');
1090
+ node = select('[data-uid="' + pathId + '"]', parent.navigationpaneModule.treeObj.element);
1091
+ }
986
1092
  updatePath(node, parent.dropData, parent);
987
1093
  }
988
1094
  read(parent, events.dropPath, parent.dropPath);
@@ -996,11 +1102,8 @@ export function readDropPath(parent) {
996
1102
  * @returns {object} - returns the duplicated path.
997
1103
  * @private
998
1104
  */
999
- // eslint-disable-next-line
1000
1105
  export function getDuplicateData(parent, name) {
1001
- // eslint-disable-next-line
1002
1106
  var data = null;
1003
- // eslint-disable-next-line
1004
1107
  var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;
1005
1108
  for (var i = 0; i < records.length; i++) {
1006
1109
  if (getValue('name', records[i]) === name) {
@@ -1180,6 +1283,30 @@ export function removeItemClass(parent, value) {
1180
1283
  ele[i].classList.remove(value);
1181
1284
  }
1182
1285
  }
1286
+ /**
1287
+ * Remove item class handler
1288
+ *
1289
+ * @param {Element} scrollParent - specifies the scrolling target.
1290
+ * @param {IFileManager} parent - specifies the parent.
1291
+ * @param {string} nodeClass - specifies the node class.
1292
+ * @param {number} screenY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the entire screen.
1293
+ * @param {number} clientY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the target element.
1294
+ * @returns {void}
1295
+ * @private
1296
+ */
1297
+ export function scrollHandler(scrollParent, parent, nodeClass, screenY, clientY) {
1298
+ var position;
1299
+ var elementData = scrollParent.getBoundingClientRect();
1300
+ var node = select('.' + nodeClass, scrollParent);
1301
+ if ((screenY >= (elementData.top + scrollParent.clientHeight - 30)) && !isNullOrUndefined(node)) {
1302
+ position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;
1303
+ scrollParent.scrollBy(0, position);
1304
+ }
1305
+ if (!isNullOrUndefined(node) && (clientY <= (elementData.top + 30))) {
1306
+ position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;
1307
+ scrollParent.scrollBy(0, -position);
1308
+ }
1309
+ }
1183
1310
  /**
1184
1311
  * Dragging handler
1185
1312
  *
@@ -1200,12 +1327,15 @@ export function draggingHandler(parent, args) {
1200
1327
  }
1201
1328
  removeBlur(parent, 'hover');
1202
1329
  var node = null;
1330
+ var scrollParent;
1203
1331
  if (parent.targetModule === 'navigationpane') {
1204
1332
  node = closest(args.target, 'li');
1205
1333
  node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);
1206
1334
  canDrop = true;
1207
1335
  /* istanbul ignore next */
1208
1336
  parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);
1337
+ scrollParent = parent.navigationpaneModule.treeObj.element.parentElement;
1338
+ scrollHandler(scrollParent, parent, 'e-level-2', args.event.screenY, args.event.y);
1209
1339
  }
1210
1340
  else if (parent.targetModule === 'detailsview') {
1211
1341
  node = closest(args.target, 'tr');
@@ -1216,6 +1346,8 @@ export function draggingHandler(parent, args) {
1216
1346
  node.classList.add(CLS.DROP_FILE);
1217
1347
  }
1218
1348
  canDrop = true;
1349
+ scrollParent = parent.detailsviewModule.gridObj.element.querySelector('.e-content');
1350
+ scrollHandler(scrollParent, parent, 'e-row', args.event.screenY, args.event.y);
1219
1351
  }
1220
1352
  else if (parent.targetModule === 'largeiconsview') {
1221
1353
  node = closest(args.target, 'li');
@@ -1223,6 +1355,8 @@ export function draggingHandler(parent, args) {
1223
1355
  node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);
1224
1356
  }
1225
1357
  canDrop = true;
1358
+ scrollParent = parent.largeiconsviewModule.element.firstElementChild;
1359
+ scrollHandler(scrollParent, parent, 'e-large-icon', args.event.screenY, args.event.y);
1226
1360
  /* istanbul ignore next */
1227
1361
  }
1228
1362
  else if (parent.targetModule === 'breadcrumbbar') {
@@ -1241,7 +1375,6 @@ export function draggingHandler(parent, args) {
1241
1375
  * @private
1242
1376
  */
1243
1377
  // Ignored the message key value in permission object
1244
- // eslint-disable-next-line
1245
1378
  export function objectToString(data) {
1246
1379
  var str = '';
1247
1380
  var keys = Object.keys(data);
@@ -1260,7 +1393,6 @@ export function objectToString(data) {
1260
1393
  * @returns {string} returns the item name.
1261
1394
  * @private
1262
1395
  */
1263
- // eslint-disable-next-line
1264
1396
  export function getItemName(parent, data) {
1265
1397
  if (parent.hasId) {
1266
1398
  return getValue('id', data);
@@ -1275,7 +1407,6 @@ export function getItemName(parent, data) {
1275
1407
  * @returns {void}
1276
1408
  * @private
1277
1409
  */
1278
- // eslint-disable-next-line
1279
1410
  export function updateRenamingData(parent, data) {
1280
1411
  parent.itemData = [data];
1281
1412
  parent.currentItemText = getValue('name', data);
@@ -1306,7 +1437,6 @@ export function doRename(parent) {
1306
1437
  * @private
1307
1438
  */
1308
1439
  export function doDownload(parent) {
1309
- // eslint-disable-next-line
1310
1440
  var items = parent.itemData;
1311
1441
  for (var i = 0; i < items.length; i++) {
1312
1442
  if (!hasDownloadAccess(items[i])) {
@@ -1327,7 +1457,6 @@ export function doDownload(parent) {
1327
1457
  * @returns {void}
1328
1458
  * @private
1329
1459
  */
1330
- // eslint-disable-next-line
1331
1460
  export function doDeleteFiles(parent, data, newIds) {
1332
1461
  for (var i = 0; i < data.length; i++) {
1333
1462
  if (!hasEditAccess(data[i])) {
@@ -1348,7 +1477,6 @@ export function doDeleteFiles(parent, data, newIds) {
1348
1477
  * @returns {void}
1349
1478
  * @private
1350
1479
  */
1351
- // eslint-disable-next-line
1352
1480
  export function doDownloadFiles(parent, data, newIds) {
1353
1481
  for (var i = 0; i < data.length; i++) {
1354
1482
  if (!hasDownloadAccess(data[i])) {
@@ -1370,7 +1498,6 @@ export function doDownloadFiles(parent, data, newIds) {
1370
1498
  * @returns {void}
1371
1499
  * @private
1372
1500
  */
1373
- // eslint-disable-next-line
1374
1501
  export function createDeniedDialog(parent, data, action) {
1375
1502
  var message = getValue('message', getValue('permission', data));
1376
1503
  if (message === '') {
@@ -1392,7 +1519,6 @@ export function createDeniedDialog(parent, data, action) {
1392
1519
  * @returns {string} - returns accesses classes.
1393
1520
  * @private
1394
1521
  */
1395
- // eslint-disable-next-line
1396
1522
  export function getAccessClass(data) {
1397
1523
  return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';
1398
1524
  }
@@ -1403,9 +1529,7 @@ export function getAccessClass(data) {
1403
1529
  * @returns {boolean} - returns read access.
1404
1530
  * @private
1405
1531
  */
1406
- // eslint-disable-next-line
1407
1532
  export function hasReadAccess(data) {
1408
- // eslint-disable-next-line
1409
1533
  var permission = getValue('permission', data);
1410
1534
  return (permission && !getValue('read', permission)) ? false : true;
1411
1535
  }
@@ -1416,9 +1540,7 @@ export function hasReadAccess(data) {
1416
1540
  * @returns {boolean} - returns edit access.
1417
1541
  * @private
1418
1542
  */
1419
- // eslint-disable-next-line
1420
1543
  export function hasEditAccess(data) {
1421
- // eslint-disable-next-line
1422
1544
  var permission = getValue('permission', data);
1423
1545
  return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;
1424
1546
  }
@@ -1429,9 +1551,7 @@ export function hasEditAccess(data) {
1429
1551
  * @returns {boolean} - returns content access.
1430
1552
  * @private
1431
1553
  */
1432
- // eslint-disable-next-line
1433
1554
  export function hasContentAccess(data) {
1434
- // eslint-disable-next-line
1435
1555
  var permission = getValue('permission', data);
1436
1556
  return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;
1437
1557
  }
@@ -1442,9 +1562,7 @@ export function hasContentAccess(data) {
1442
1562
  * @returns {boolean} - returns upload access.
1443
1563
  * @private
1444
1564
  */
1445
- // eslint-disable-next-line
1446
1565
  export function hasUploadAccess(data) {
1447
- // eslint-disable-next-line
1448
1566
  var permission = getValue('permission', data);
1449
1567
  return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;
1450
1568
  }
@@ -1455,9 +1573,7 @@ export function hasUploadAccess(data) {
1455
1573
  * @returns {boolean} - returns download access.
1456
1574
  * @private
1457
1575
  */
1458
- // eslint-disable-next-line
1459
1576
  export function hasDownloadAccess(data) {
1460
- // eslint-disable-next-line
1461
1577
  var permission = getValue('permission', data);
1462
1578
  return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;
1463
1579
  }
@@ -1469,7 +1585,6 @@ export function hasDownloadAccess(data) {
1469
1585
  * @private
1470
1586
  */
1471
1587
  export function createNewFolder(parent) {
1472
- // eslint-disable-next-line
1473
1588
  var details = parent.itemData[0];
1474
1589
  if (!hasContentAccess(details)) {
1475
1590
  createDeniedDialog(parent, details, events.permissionEditContents);
@@ -1486,7 +1601,6 @@ export function createNewFolder(parent) {
1486
1601
  * @private
1487
1602
  */
1488
1603
  export function uploadItem(parent) {
1489
- // eslint-disable-next-line
1490
1604
  var details = parent.itemData[0];
1491
1605
  if (!hasUploadAccess(details)) {
1492
1606
  createDeniedDialog(parent, details, events.permissionUpload);
@@ -1497,3 +1611,65 @@ export function uploadItem(parent) {
1497
1611
  uploadEle.click();
1498
1612
  }
1499
1613
  }
1614
+ /**
1615
+ * Close dialog popup handler
1616
+ *
1617
+ * @param {IFileManager} parent - specifies the parent.
1618
+ * @returns {void}
1619
+ * @private
1620
+ */
1621
+ export function closePopup(parent) {
1622
+ if (!isNullOrUndefined(parent.dialogObj)) {
1623
+ parent.dialogObj.hide();
1624
+ }
1625
+ }
1626
+ /**
1627
+ * Access control handler
1628
+ *
1629
+ * @param {IFileManager} parent - specifies the parent.
1630
+ * @param {Object[]} itemData - specifies the item elements.
1631
+ * @param {string} action - specifies the action.
1632
+ * @param {boolean} isPathPermision - specifies the path permission.
1633
+ * @returns {string} returns the path.
1634
+ * @private
1635
+ */
1636
+ export function getAccessDetails(parent, itemData, action, isPathPermision) {
1637
+ var accessMessage = '';
1638
+ for (var i = 0; i < itemData.length; i++) {
1639
+ var permission = getValue('permission', itemData[i]);
1640
+ if (permission == null) {
1641
+ permission = undefined;
1642
+ }
1643
+ if (isPathPermision) {
1644
+ if (permission && (!getValue('read', permission) || !getValue('writeContents', permission))) {
1645
+ accessMessage = getValue('message', getValue('permission', itemData[i]));
1646
+ if (accessMessage === '') {
1647
+ accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', 'writeContents');
1648
+ }
1649
+ }
1650
+ }
1651
+ else {
1652
+ var copyOrMovePermission = action === 'copy' ? getValue('copy', permission) : getValue('write', permission);
1653
+ if (permission && (!getValue('read', permission) || !copyOrMovePermission)) {
1654
+ accessMessage = getValue('message', getValue('permission', itemData[i]));
1655
+ if (accessMessage === '') {
1656
+ accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', action);
1657
+ }
1658
+ }
1659
+ }
1660
+ if (accessMessage !== '') {
1661
+ parent.responseData = {
1662
+ cwd: null,
1663
+ details: null,
1664
+ error: {
1665
+ code: '401',
1666
+ message: accessMessage,
1667
+ fileExists: null
1668
+ },
1669
+ files: null
1670
+ };
1671
+ break;
1672
+ }
1673
+ }
1674
+ return accessMessage;
1675
+ }