@syncfusion/ej2-filemanager 24.1.43 → 24.1.45

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 (51) hide show
  1. package/CHANGELOG.md +17 -1
  2. package/README.md +1 -1
  3. package/dist/ej2-filemanager.min.js +2 -2
  4. package/dist/ej2-filemanager.umd.min.js +2 -2
  5. package/dist/ej2-filemanager.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-filemanager.es2015.js +13 -2
  7. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  8. package/dist/es6/ej2-filemanager.es5.js +14 -2
  9. package/dist/es6/ej2-filemanager.es5.js.map +1 -1
  10. package/dist/global/ej2-filemanager.min.js +2 -2
  11. package/dist/global/ej2-filemanager.min.js.map +1 -1
  12. package/dist/global/index.d.ts +1 -1
  13. package/package.json +10 -10
  14. package/src/file-manager/actions/virtualization.js +3 -0
  15. package/src/file-manager/pop-up/context-menu.js +11 -2
  16. package/styles/bootstrap-dark.css +9 -7
  17. package/styles/bootstrap.css +9 -7
  18. package/styles/bootstrap4.css +9 -7
  19. package/styles/bootstrap5-dark.css +9 -7
  20. package/styles/bootstrap5.css +9 -7
  21. package/styles/fabric-dark.css +9 -7
  22. package/styles/fabric.css +9 -7
  23. package/styles/file-manager/_layout.scss +4 -2
  24. package/styles/file-manager/_theme.scss +8 -4
  25. package/styles/file-manager/bootstrap-dark.css +9 -7
  26. package/styles/file-manager/bootstrap.css +9 -7
  27. package/styles/file-manager/bootstrap4.css +9 -7
  28. package/styles/file-manager/bootstrap5-dark.css +9 -7
  29. package/styles/file-manager/bootstrap5.css +9 -7
  30. package/styles/file-manager/fabric-dark.css +9 -7
  31. package/styles/file-manager/fabric.css +9 -7
  32. package/styles/file-manager/fluent-dark.css +9 -7
  33. package/styles/file-manager/fluent.css +9 -7
  34. package/styles/file-manager/highcontrast-light.css +9 -7
  35. package/styles/file-manager/highcontrast.css +9 -7
  36. package/styles/file-manager/material-dark.css +9 -7
  37. package/styles/file-manager/material.css +9 -7
  38. package/styles/file-manager/material3-dark.css +9 -7
  39. package/styles/file-manager/material3.css +9 -7
  40. package/styles/file-manager/tailwind-dark.css +9 -7
  41. package/styles/file-manager/tailwind.css +9 -7
  42. package/styles/fluent-dark.css +9 -7
  43. package/styles/fluent.css +9 -7
  44. package/styles/highcontrast-light.css +9 -7
  45. package/styles/highcontrast.css +9 -7
  46. package/styles/material-dark.css +9 -7
  47. package/styles/material.css +9 -7
  48. package/styles/material3-dark.css +9 -7
  49. package/styles/material3.css +9 -7
  50. package/styles/tailwind-dark.css +9 -7
  51. package/styles/tailwind.css +9 -7
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-filemanager.min.js","sources":["../../src/file-manager/common/utility.js","../../src/file-manager/common/operations.js","../../src/file-manager/pop-up/dialog.js","../../src/file-manager/models/ajax-settings.js","../../src/file-manager/models/toolbar-settings.js","../../src/file-manager/models/search-settings.js","../../src/file-manager/models/details-view-settings.js","../../src/file-manager/models/contextMenu-settings.js","../../src/file-manager/models/navigation-pane-settings.js","../../src/file-manager/models/upload-settings.js","../../src/file-manager/models/column.js","../../src/file-manager/base/classes.js","../../src/file-manager/base/constant.js","../../src/file-manager/layout/large-icons-view.js","../../src/file-manager/actions/breadcrumb-bar.js","../../src/file-manager/pop-up/context-menu.js","../../src/file-manager/models/default-locale.js","../../src/file-manager/base/file-manager.js","../../src/file-manager/actions/toolbar.js","../../src/file-manager/actions/virtualization.js","../../src/file-manager/layout/navigation-pane.js","../../src/file-manager/layout/details-view.js","../../src/global.js"],"sourcesContent":["import * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { read, paste, Search, filter, Download, Delete } from '../common/operations';\nimport { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, detach } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createDialog } from '../pop-up/dialog';\n/**\n * Utility file for common actions\n *\n * @param {HTMLLIElement} node - specifies the node.\n * @param {Object} data - specifies the data.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function updatePath(node, data, instance) {\n var text = getValue('name', data);\n var id = node.getAttribute('data-id');\n var newText = isNOU(id) ? text : id;\n instance.setProperties({ path: getPath(node, newText, instance.hasId) }, true);\n instance.pathId = getPathId(node);\n instance.pathNames = getPathNames(node, text);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId) {\n var matched = getParents(element, text, false, hasId);\n var path = hasId ? '' : '/';\n var len = matched.length - (hasId ? 1 : 2);\n for (var i = len; i >= 0; i--) {\n path += matched[i] + '/';\n }\n return path;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} node - specifies the node element.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node) {\n var matched = getParents(node, node.getAttribute('data-uid'), true);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text) {\n var matched = getParents(element, text, false);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') :\n select('.' + CLS.LIST_TEXT, el).textContent);\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = parent.hasId ? '' : '/';\n var i = parent.hasId ? 0 : 1;\n for (i; i < parent.pathId.length; i++) {\n // eslint-disable-next-line\n var data = getValue(parent.pathId[i], parent.feParent);\n newPath += getValue(key, data) + '/';\n }\n parent.setProperties({ path: newPath }, true);\n}\n/**\n * Functions for remove active element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function removeActive(parent) {\n if (parent.isCut) {\n removeBlur(parent);\n parent.selectedNodes = [];\n parent.actionRecords = [];\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n }\n}\n/**\n * Selects active element in File Manager\n *\n * @param {string} action - specifies the action.\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns active element.\n * @private\n */\nexport function activeElement(action, parent) {\n parent.isSearchCut = false;\n parent.actionRecords = [];\n parent.activeElements = [];\n parent.notify(events.cutCopyInit, {});\n if (parent.activeElements.length === 0) {\n return false;\n }\n removeBlur(parent);\n var blurEle = parent.activeElements;\n if (parent.activeModule !== 'navigationpane') {\n parent.targetPath = parent.path;\n }\n else {\n parent.targetPath = getParentPath(parent.path);\n }\n var i = 0;\n if (blurEle) {\n getModule(parent, blurEle[0]);\n if (action === 'cut') {\n while (i < blurEle.length) {\n addBlur(blurEle[i]);\n i++;\n }\n }\n }\n i = 0;\n parent.selectedNodes = [];\n parent.enablePaste = true;\n parent.notify(events.showPaste, {});\n while (i < parent.activeRecords.length) {\n parent.actionRecords.push(parent.activeRecords[i]);\n parent.selectedNodes.push(getValue('name', parent.activeRecords[i]));\n i++;\n }\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) &&\n parent.activeModule !== 'navigationpane') {\n parent.selectedNodes = [];\n parent.isSearchCut = true;\n var i_1 = 0;\n while (i_1 < parent.selectedItems.length) {\n parent.selectedNodes.push(parent.selectedItems[i_1]);\n i_1++;\n }\n }\n return true;\n}\n/**\n * Adds blur to the elements\n *\n * @param {Element} nodes - specifies the nodes.\n * @returns {void}\n * @private\n */\nexport function addBlur(nodes) {\n nodes.classList.add(CLS.BLUR);\n}\n/**\n * Removes blur from elements\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} hover - specifies the hover string.\n * @returns {void}\n * @private\n */\nexport function removeBlur(parent, hover) {\n var blurEle = (!hover) ? parent.element.querySelectorAll('.' + CLS.BLUR) :\n parent.element.querySelectorAll('.' + CLS.HOVER);\n var i = 0;\n while (i < blurEle.length) {\n blurEle[i].classList.remove((!hover) ? CLS.BLUR : CLS.HOVER);\n i++;\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getModule(parent, element) {\n if (element) {\n if (element.classList.contains(CLS.ROW)) {\n parent.activeModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICON)) {\n parent.activeModule = 'largeiconsview';\n }\n else {\n parent.activeModule = 'navigationpane';\n }\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\n// eslint-disable-next-line\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\n// eslint-disable-next-line\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {string} - returns the image url.\n * @private\n */\n// eslint-disable-next-line\nexport function getImageUrl(parent, item) {\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var imgUrl;\n var fileName = encodeURIComponent(getValue('name', item));\n var fPath = getValue('filterPath', item);\n if (parent.hasId) {\n var imgId = getValue('id', item);\n imgUrl = baseUrl + pathUrl + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + pathUrl + encodeURIComponent(fPath.replace(/\\\\/g, '/')) + fileName;\n }\n else {\n imgUrl = baseUrl + pathUrl + parent.path + fileName;\n }\n imgUrl = imgUrl + '&time=' + (new Date().getTime()).toString();\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs.imageUrl;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\n// eslint-disable-next-line\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\n// eslint-disable-next-line\nexport function getName(parent, data) {\n var name = getValue('name', data);\n var fPath = getValue('filterPath', data);\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) && !isNOU(fPath)) {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(parent.path, '') + name;\n }\n return name;\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object[]} items - specifies the item elements.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None') {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n // eslint-disable-next-line\n var lists = new DataManager(items).executeLocal(query);\n return getValue('records', lists);\n}\n/**\n * Gets the data object\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} key - specifies the key.\n * @param {string} value - specifies the value.\n * @returns {Object} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getObject(parent, key, value) {\n // eslint-disable-next-line\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var query = new Query().where(key, 'equal', value);\n // eslint-disable-next-line\n var lists = new DataManager(currFiles).executeLocal(query);\n return lists[0];\n}\n/**\n * Creates empty element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLElement} element - specifies the element.\n * @param {ReadArgs | SearchArgs} args - specifies the args.\n * @returns {void}\n * @private\n */\nexport function createEmptyElement(parent, element, args) {\n var top;\n var layoutElement = select('#' + parent.element.id + CLS.LAYOUT_ID, parent.element);\n var addressBarHeight = select('#' + parent.element.id + CLS.BREADCRUMBBAR_ID, layoutElement).offsetHeight;\n top = layoutElement.offsetHeight - addressBarHeight;\n if (parent.view === 'Details') {\n top = top - select('.' + CLS.GRID_HEADER, layoutElement).offsetHeight;\n }\n if (isNOU(element.querySelector('.' + CLS.EMPTY))) {\n var emptyDiv = createElement('div', { className: CLS.EMPTY });\n var emptyFolder = createElement('div', { className: CLS.LARGE_EMPTY_FOLDER });\n var emptyEle = createElement('div', { className: CLS.EMPTY_CONTENT });\n var dragFile = createElement('div', { className: CLS.EMPTY_INNER_CONTENT });\n if (parent.view === 'Details') {\n element.querySelector('.' + CLS.GRID_VIEW).appendChild(emptyDiv);\n }\n else {\n element.appendChild(emptyDiv);\n }\n emptyDiv.appendChild(emptyFolder);\n emptyDiv.appendChild(emptyEle);\n emptyDiv.appendChild(dragFile);\n }\n if (element.querySelector('.' + CLS.EMPTY)) {\n if (!isNOU(args.error)) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Access-Denied');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Access-Details');\n }\n else if (parent.isFiltered) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Key');\n }\n else if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Search-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Search-Key');\n }\n else {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Folder-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getDirectories(files) {\n return new DataManager(files).executeLocal(new Query().where(events.isFile, 'equal', false, false));\n}\n/**\n * set the Node ID\n *\n * @param {ReadArgs} result - specifies the result.\n * @param {string} rootId - specifies the rootId.\n * @returns {void}\n * @private\n */\nexport function setNodeId(result, rootId) {\n // eslint-disable-next-line\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function setDateObject(args, localeString, dateFormat) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n if (isNOU(dateFormat)) {\n dateFormat = \"MM/dd/yyyy\";\n }\n setValue('_fm_created', localeString.formatDate(createdDate, { format: dateFormat }), args[i]);\n setValue('_fm_modified', localeString.formatDate(modifiedDate, { format: dateFormat }), args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n // eslint-disable-next-line\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n // eslint-disable-next-line\n var data = getObject(parent, key, folders[i]);\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n parent.pathId.push(id);\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n read(parent, eventName, parent.path);\n break;\n }\n}\n/**\n * Opens the searched folder\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function openSearchFolder(parent, data) {\n parent.originalPath = getFullPath(parent, data, parent.path);\n var root = getValue(parent.pathId[0], parent.feParent);\n var isRoot = getValue('_fm_id', parent.itemData[0]) == 'fe_tree';\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n var searchData = getObject(parent, key, getValue('name', data));\n if (isNullOrUndefined(searchData)) {\n if (!isRoot) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n }\n else {\n setNextPath(parent, parent.path);\n return;\n }\n }\n else {\n var id = getValue('_fm_id', searchData);\n parent.setProperties({ path: parent.originalPath }, true);\n parent.pathId.push(id);\n parent.itemData = [searchData];\n parent.pathNames.push(getValue('name', searchData));\n }\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n // eslint-disable-next-line\n var subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);\n if (!subFolder) {\n if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {\n parent.notify(events.pasteInit, {});\n paste(parent, parent.targetPath, parent.selectedNodes, path, parent.fileAction, [], parent.actionRecords);\n }\n else {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n removeBlur(parent);\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n }\n }\n }\n}\n/**\n * Validates the sub folders\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {'{ [key: string]: Object; }[]'} data - specifies the data.\n * @param {string} dropPath - specifies the drop path.\n * @param {string} dragPath - specifies the drag path.\n * @returns {boolean} - returns the validated sub folder.\n * @private\n */\n// eslint-disable-next-line\nexport function validateSubFolder(parent, data, dropPath, dragPath) {\n var subFolder = false;\n for (var i = 0; i < data.length; i++) {\n if (!getValue('isFile', data[i])) {\n var tempTarget = getFullPath(parent, data[i], dragPath);\n if (dropPath.indexOf(tempTarget) === 0) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Sub-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n else {\n var srcData = parent.dragNodes[i];\n var len = 0;\n if (srcData) {\n len = srcData.lastIndexOf('/');\n }\n var path = '';\n if (len > 0) {\n path = dragPath + srcData.substring(0, len + 1);\n }\n if (path === dropPath) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n }\n return subFolder;\n}\n/**\n * Validates the drop handler\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function dropHandler(parent) {\n parent.isDragDrop = true;\n if (parent.dragData.length !== 0) {\n parent.dragPath = parent.dragPath.replace(/\\\\/g, '/');\n parent.dropPath = parent.dropPath.replace(/\\\\/g, '/');\n var subFolder = validateSubFolder(parent, parent.dragData, parent.dropPath, parent.dragPath);\n if (!subFolder && (parent.dragPath !== parent.dropPath)) {\n parent.itemData = [parent.dropData];\n paste(parent, parent.dragPath, parent.dragNodes, parent.dropPath, 'move', [], parent.dragData);\n parent.notify(events.pasteInit, {});\n }\n }\n}\n/**\n * Gets the parent path\n *\n * @param {string} oldPath - specifies the old path.\n * @returns {string} - returns the parent path.\n * @private\n */\nexport function getParentPath(oldPath) {\n var path = oldPath.split('/');\n var newPath = path[0] + '/';\n for (var i = 1; i < path.length - 2; i++) {\n newPath += path[i] + '/';\n }\n return newPath;\n}\n/**\n * Gets the directory path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {ReadArgs} args - returns the read arguements.\n * @returns {string} - returns the directory path\n * @private\n */\nexport function getDirectoryPath(parent, args) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', args.cwd) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return parent.hasId ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n if (!parent.isDragDrop || (parent.path === parent.dragPath) || (parent.path === parent.dropPath)\n || parent.isSearchDrag) {\n parent.isPathDrag = false;\n read(parent, events.pasteEnd, parent.path);\n }\n else {\n readDropPath(parent);\n }\n parent.trigger('success', { action: operation, result: result });\n}\n/**\n * Reads the drop path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function readDropPath(parent) {\n var pathId = getValue('_fm_id', parent.dropData);\n parent.expandedId = pathId;\n parent.itemData = [parent.dropData];\n if (parent.isPathDrag) {\n parent.notify(events.pathDrag, parent.itemData);\n }\n else {\n if (parent.navigationpaneModule) {\n var node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n if (!node) {\n var liElement = document.querySelector('[data-id = \"' + getValue('id', parent.dropData) + '\"]');\n pathId = liElement.getAttribute(\"data-uid\");\n node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n }\n updatePath(node, parent.dropData, parent);\n }\n read(parent, events.dropPath, parent.dropPath);\n }\n}\n/**\n * Gets the duplicated path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} name - specifies the name.\n * @returns {object} - returns the duplicated path.\n * @private\n */\n// eslint-disable-next-line\nexport function getDuplicateData(parent, name) {\n // eslint-disable-next-line\n var data = null;\n // eslint-disable-next-line\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Remove item class handler\n *\n * @param {Element} scrollParent - specifies the scrolling target.\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} nodeClass - specifies the node class.\n * @param {number} screenY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the entire screen.\n * @param {number} clientY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the target element.\n * @returns {void}\n * @private\n */\nexport function scrollHandler(scrollParent, parent, nodeClass, screenY, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select(\".\" + nodeClass, scrollParent);\n if ((screenY >= (elementData.top + scrollParent.clientHeight - 30)) && !isNullOrUndefined(node)) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, position);\n }\n if (!isNullOrUndefined(node) && (clientY <= (elementData.top + 30))) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, -position);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n var scrollParent;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n scrollParent = parent.navigationpaneModule.treeObj.element.parentElement;\n scrollHandler(scrollParent, parent, 'e-level-2', args.event.screenY, args.event.y);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n scrollParent = parent.detailsviewModule.gridObj.element.querySelector('.e-content');\n scrollHandler(scrollParent, parent, 'e-row', args.event.screenY, args.event.y);\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n scrollParent = parent.largeiconsviewModule.element.firstElementChild;\n scrollHandler(scrollParent, parent, 'e-large-icon', args.event.screenY, args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\n// eslint-disable-next-line\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\n// eslint-disable-next-line\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n // eslint-disable-next-line\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function createDeniedDialog(parent, data, action) {\n var message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\n// eslint-disable-next-line\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasReadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasEditAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasContentAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasUploadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasDownloadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n // eslint-disable-next-line\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n // eslint-disable-next-line\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n","import { Ajax, createElement, select, extend, Internationalization } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath } from '../common/utility';\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n // eslint-disable-next-line\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n // eslint-disable-next-line\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n // eslint-disable-next-line\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n // eslint-disable-next-line\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n // eslint-disable-next-line\n var filterData;\n // eslint-disable-next-line\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n // eslint-disable-next-line\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, \n// eslint-disable-next-line\nrenameItems, actionRecords) {\n // eslint-disable-next-line\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n // eslint-disable-next-line\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n // eslint-disable-next-line\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Function for createAjax in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {Function} fn - specifies the fn.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the target path.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === '_fm_modified') {\n if (!isNOU(columns[i].format)) {\n dateFormat = columns[i].format.toString();\n }\n break;\n }\n }\n return dateFormat;\n}\nfunction createAjax(\n// eslint-disable-next-line\nparent, data, fn, event, operation, targetPath) {\n // eslint-disable-next-line\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n // eslint-disable-next-line\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n var intl = new Internationalization(parent.locale);\n if (!isNOU(result.files)) {\n setDateObject(result.files, intl, getDateFormat(parent));\n for (var i = 0, len = result.files.length; i < len; i++) {\n // eslint-disable-next-line\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(\n// eslint-disable-next-line\nparent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: action, result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, action);\n }\n}\n/* istanbul ignore next */\n/**\n * Function for create success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction createSuccess(parent, result, itemName) {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var args = { action: 'create', result: result };\n parent.trigger('success', args);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.createEnd, parent.path);\n }\n else {\n if (result.error.code === '400') {\n if (parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#newname', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n else {\n var result_2 = {\n files: null,\n error: {\n code: '400',\n message: getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + itemName + '\"'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result_2);\n }\n var args = { action: 'create', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'create');\n }\n }\n}\n/* istanbul ignore next */\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result, path) {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n if (parent.activeModule === 'navigationpane') {\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/'));\n parent.itemData[0] = parent.renamedItem;\n read(parent, events.pathChanged, parent.path === '/' ? parent.path : getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/') + parent.renamedItem.name + '/');\n if (getValue('filterPath', parent.renamedItem) === getValue('filterPath', parent.itemData[0]) && parent.pathNames.length > 1) {\n parent.pathNames[parent.pathNames.length - 1] = parent.renameText;\n }\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(\n// eslint:disable-next-line\nparent, event, path, searchString, showHiddenItems, caseSensitive) {\n // eslint-disable-next-line\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n // eslint-disable-next-line\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var eventArgs = { data: data, cancel: false };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n });\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @param {string[]} replaceItems - specifies the replacement.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details, replaceItems) {\n var options = getOptions(parent, text, e, details, replaceItems);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details, replaceItems) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function (e) {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n var index_1;\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index_1 = val.name.indexOf('.') + 1;\n return (index_1 === 0 && (!val.isFile)) ? 'Folder' : ((index_1 !== 0) ? val.name.substr(index_1).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] == undefined) {\n strArr = details.name.split(',').map(function (val) {\n index_1 = val.indexOf('.') + 1;\n return (index_1 === 0) ? 'Folder' : val.substr(index_1).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {SelectedEventArgs} data - specifies the data.\n * @returns {HTMLElement} - returns the HTML element.\n * @private\n */\nfunction getFilesName(data) {\n var parent = createElement('div', { id: 'uploadDialog' });\n var ulElement = createElement('ul');\n var filesData = data.isModified ? data.modifiedFilesData : data.filesData;\n for (var fileCount = 0; fileCount < filesData.length; fileCount++) {\n var liElement = createElement('li', { className: 'dialogFiles' });\n liElement.innerHTML = filesData[fileCount].name;\n ulElement.appendChild(liElement);\n }\n parent.appendChild(ulElement);\n var errorTag = createElement('div', { className: 'e-fe-error' });\n parent.appendChild(errorTag);\n return parent;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = (parent.activeModule === 'navigationpane') ? getValue('filterPath', parent.itemData[0]).replace(/\\\\/g, '/') : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120, isPrimaryKey: true,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-text\\\">\" + data.name + \"</span>\";\n }),\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n this.items = [];\n this.items = this.renderList(args);\n this.items = this.allItems = getSortedData(this.parent, this.items);\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n if (!this.element.style.height) {\n this.adjustHeight();\n }\n this.parent.virtualizationModule.setUIVirtualization();\n }\n // eslint-disable-next-line\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.listElements.setAttribute(\"aria-label\", \"listbox\");\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.adjustHeight();\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: false,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n // eslint-disable-next-line\n this.parent.dragData.push(this.getItemObject(activeEle[i]));\n this.parent.activeElements.push(activeEle[i]);\n }\n getModule(this.parent, dragLi);\n this.parent.dragPath = this.parent.path;\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n LargeIconsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, '.e-list-item');\n // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n // eslint-disable-next-line\n var info = this.getItemObject(dropLi);\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n else {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n LargeIconsView.prototype.getModuleName = function () {\n return 'largeiconsview';\n };\n LargeIconsView.prototype.adjustHeight = function () {\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n this.element.style.height = (pane.offsetHeight - bar.offsetHeight) + 'px';\n };\n LargeIconsView.prototype.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n this.renderCheckbox(args);\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n // eslint-disable-next-line\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imgUrl = getImageUrl(this.parent, items[i]);\n setValue('_fm_imageUrl', imgUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem) {\n this.clearSelect();\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n }\n };\n LargeIconsView.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'largeiconsview') {\n this.doOpenAction(args.target);\n }\n };\n LargeIconsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'LargeIcons' && this.element) {\n this.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n LargeIconsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.startItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n var eveArgs = { ctrlKey: true, shiftKey: true };\n this.doSelection(lastItem, eveArgs);\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.clearSelection();\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n LargeIconsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onSearch = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n this.parent.searchedItems = args.files;\n this.onLayoutChange(args);\n }\n };\n LargeIconsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.adjustHeight();\n };\n LargeIconsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.updateSelectedData();\n };\n LargeIconsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'LargeIcons' && !isNOU(this.listObj) &&\n this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered\n && this.parent.sortBy === 'filterPath') {\n this.parent.sortBy = 'name';\n this.parent.notify(events.sortByChange, {});\n }\n };\n LargeIconsView.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.search, this.onSearch);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.splitterResize, this.splitterResizeHandler);\n this.parent.off(events.resizeEnd, this.resizeHandler);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n this.parent.off(events.filterEnd, this.onPathChanged);\n };\n LargeIconsView.prototype.addEventListener = function () {\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.search, this.onSearch, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.splitterResize, this.splitterResizeHandler, this);\n this.parent.on(events.resizeEnd, this.resizeHandler, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n };\n LargeIconsView.prototype.onActionFailure = function () { this.isInteraction = true; this.isInteracted = true; };\n // eslint-disable-next-line\n LargeIconsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var ele = closest(args.target, 'li');\n this.parent.itemData = [this.getItemObject(ele)];\n }\n };\n LargeIconsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.updateSelectedData();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n LargeIconsView.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath === '') ? [getPathObject(this.parent)] :\n [this.getItemObject(select('.e-active', this.element))];\n }\n };\n LargeIconsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeRecords = [];\n this.parent.activeElements = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.activeElements.push(activeEle[i]);\n this.parent.activeRecords.push(this.getItemObject(activeEle[i]));\n }\n }\n };\n LargeIconsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {\n this.onPathChanged(args);\n }\n }\n };\n LargeIconsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n LargeIconsView.prototype.onPropertyChanged = function (e) {\n var currentSelected;\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'selectedItems':\n this.isInteraction = false;\n this.isInteracted = false;\n currentSelected = isNOU(this.parent.selectedItems) ? [] : this.parent.selectedItems.slice(0);\n currentSelected = this.parent.allowMultiSelection ? currentSelected :\n currentSelected.slice(currentSelected.length - 1);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onClearAllInit();\n if (currentSelected.length) {\n this.selectItems(currentSelected);\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n this.isInteraction = true;\n this.isInteracted = true;\n break;\n case 'showThumbnail':\n refresh(this.parent);\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n eve.originalEvent.preventDefault();\n if (proxy_1.parent.isDevice) {\n proxy_1.tapCount = eve.tapCount;\n proxy_1.tapEvent = eve;\n setTimeout(function () {\n if (proxy_1.tapCount > 0) {\n proxy_1.doTapAction(proxy_1.tapEvent);\n }\n proxy_1.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n proxy_1.dblClickHandler(eve);\n }\n else {\n proxy_1.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n proxy_1.multiSelect = proxy_1.parent.allowMultiSelection ? true : false;\n if (proxy_1.parent.allowMultiSelection) {\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n proxy_1.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if (e.which === 3 && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (e.ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (e.ctrlKey && e.shiftKey) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !e.ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey) {\n if (!(e && e.ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n // eslint-disable-next-line\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var text = getValue('name', details_1);\n if (!_this.parent.isFile) {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imgUrl);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n // eslint-disable-next-line\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n // eslint-disable-next-line\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n LargeIconsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.FOCUS, this.element);\n };\n LargeIconsView.prototype.getActiveItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n };\n LargeIconsView.prototype.getFirstItem = function () {\n return this.itemList[0];\n };\n LargeIconsView.prototype.getLastItem = function () {\n return this.itemList[this.itemList.length - 1];\n };\n LargeIconsView.prototype.navigateItem = function (item) {\n this.setFocus(item);\n };\n LargeIconsView.prototype.navigateDown = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards, this.perRow);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.navigateRight = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.getNextItem = function (li, isTowards, perRow) {\n if (isNOU(li)) {\n return this.getFocusedItem() || this.getActiveItem() || this.getFirstItem();\n }\n var index = this.itemList.indexOf(li);\n var nextItem;\n do {\n if (isTowards) {\n index = perRow ? index + perRow : index + 1;\n }\n else {\n index = perRow ? index - perRow : index - 1;\n }\n nextItem = this.itemList[index];\n if (this.parent.enableVirtualization && isNOU(nextItem)) {\n var marginValue = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-bottom'), 10);\n var scrollHeight = this.itemList[0].getBoundingClientRect().height + marginValue;\n this.element.firstElementChild.scrollTo(this.element.firstElementChild.scrollTop, this.element.firstElementChild.scrollTop + scrollHeight);\n }\n if (isNOU(nextItem)) {\n return li;\n }\n } while (!isVisible(nextItem));\n return nextItem;\n };\n LargeIconsView.prototype.setFocus = function (nextItem) {\n if (!isNOU(nextItem)) {\n var fileSelectionArgs = this.triggerSelection('select', nextItem);\n if (fileSelectionArgs.cancel !== true) {\n this.startItem = nextItem;\n this.clearSelect();\n this.addActive(nextItem);\n this.addFocus(nextItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', nextItem);\n }\n }\n };\n LargeIconsView.prototype.spaceKey = function (fItem) {\n if (!isNOU(fItem) && !fItem.classList.contains(CLS.ACTIVE)) {\n var fileSelectionArgs = this.triggerSelection('select', fItem);\n if (fileSelectionArgs.cancel !== true) {\n this.addActive(fItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', fItem);\n }\n }\n };\n LargeIconsView.prototype.ctrlAKey = function (firstItem, lastItem) {\n if (this.parent.allowMultiSelection && !isNOU(firstItem)) {\n this.startItem = firstItem;\n var eveArgs = { ctrlKey: true, shiftKey: true };\n var liParent = this.element.querySelector('.' + CLS.LIST_PARENT);\n var liScrPos = liParent.scrollTop;\n var getCurFocusedItem = this.getFocusedItem();\n this.doSelection(lastItem, eveArgs);\n liParent.scrollTop = liScrPos;\n if (!isNOU(getCurFocusedItem)) {\n this.addFocus(getCurFocusedItem);\n }\n }\n };\n LargeIconsView.prototype.csEndKey = function (lastItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(lastItem);\n }\n else if (!isNOU(lastItem)) {\n if (e.action === 'ctrlEnd') {\n this.addFocus(lastItem);\n }\n else {\n this.doSelection(lastItem, e);\n }\n }\n };\n LargeIconsView.prototype.csHomeKey = function (firstItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(firstItem);\n }\n else if (!isNOU(firstItem)) {\n if (e.action === 'ctrlHome') {\n this.addFocus(firstItem);\n }\n else {\n this.doSelection(firstItem, e);\n }\n }\n };\n LargeIconsView.prototype.csDownKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, true);\n }\n else {\n var dItem = this.getNextItem(fItem, true, this.perRow);\n if (!isNOU(dItem)) {\n if (e.action === 'ctrlDown') {\n this.addFocus(dItem);\n }\n else {\n this.doSelection(dItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csLeftKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, false);\n }\n else {\n var lItem = this.getNextItem(fItem, false);\n if (!isNOU(lItem)) {\n if (e.action === 'ctrlLeft') {\n this.addFocus(lItem);\n }\n else {\n this.doSelection(lItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csRightKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, true);\n }\n else {\n var rItem = this.getNextItem(fItem, true);\n if (!isNOU(rItem)) {\n if (e.action === 'ctrlRight') {\n this.addFocus(rItem);\n }\n else {\n this.doSelection(rItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csUpKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, false);\n }\n else {\n var uItem = this.getNextItem(fItem, false, this.perRow);\n if (!isNOU(uItem)) {\n if (e.action === 'ctrlUp') {\n this.addFocus(uItem);\n }\n else {\n this.doSelection(uItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.addActive = function (nextItem) {\n if (!isNOU(nextItem)) {\n if (!nextItem.classList.contains(CLS.ACTIVE)) {\n this.parent.selectedItems.push(this.getDataName(nextItem));\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n addClass([nextItem], [CLS.ACTIVE]);\n nextItem.setAttribute('aria-selected', 'true');\n this.checkState(nextItem, true);\n }\n this.parent.visitedItem = nextItem;\n }\n };\n LargeIconsView.prototype.removeActive = function (preItem) {\n if (!isNOU(preItem)) {\n removeClass([preItem], [CLS.ACTIVE]);\n if (this.parent.allowMultiSelection) {\n preItem.setAttribute('aria-selected', 'false');\n }\n else {\n preItem.removeAttribute('aria-selected');\n }\n this.checkState(preItem, false);\n var index = this.parent.selectedItems.indexOf(this.getDataName(preItem));\n if (index > -1) {\n this.parent.selectedItems.splice(index, 1);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n this.parent.visitedItem = null;\n }\n };\n LargeIconsView.prototype.getDataName = function (item) {\n // eslint-disable-next-line\n var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n if (!isNOU(this.listObj)) {\n this.adjustHeight();\n }\n };\n LargeIconsView.prototype.splitterResizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.getItemCount = function () {\n var perRow = 1;\n if (this.itemList) {\n for (var i = 0, len = this.itemList.length - 1; i < len; i++) {\n if (this.itemList[i].getBoundingClientRect().top === this.itemList[i + 1].getBoundingClientRect().top) {\n perRow++;\n }\n else {\n break;\n }\n }\n }\n this.perRow = perRow;\n };\n LargeIconsView.prototype.triggerSelection = function (action, item) {\n // eslint-disable-next-line\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = {\n action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n // eslint-disable-next-line\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var newData = new DataManager(this.items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (newData.length > 0) {\n resultData = new DataManager(newData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n var index = this.items.indexOf(resultData[0]);\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[index], eveArgs);\n }\n };\n LargeIconsView.prototype.updateSelectedData = function () {\n // eslint-disable-next-line\n var data = [];\n var items = selectAll('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n for (var i = 0; i < items.length; i++) {\n data[i] = this.getItemObject(items[i]);\n }\n this.parent.itemData = data;\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.onMethodCall = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n var action = getValue('action', args);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', args));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', args));\n break;\n case 'openFile':\n this.openFile(getValue('id', args));\n break;\n case 'renameFile':\n this.isInteraction = false;\n this.isInteracted = false;\n this.renameFile(getValue('id', args), getValue('newName', args));\n break;\n case 'createFolder':\n this.isInteraction = false;\n this.isInteracted = false;\n break;\n case 'clearSelection':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onClearAllInit();\n break;\n case 'selectAll':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onSelectAllInit();\n break;\n }\n };\n LargeIconsView.prototype.getItemsIndex = function (items) {\n var indexes = [];\n var isFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filterName = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !isFilter) {\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filterName, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n }\n else {\n for (var i = 0, len = this.items.length; i < len; i++) {\n var name_2 = getValue('filterPath', this.items[i]) + getValue('name', this.items[i]);\n if ((items.indexOf(name_2) !== -1) || (items.indexOf(getValue(filterName, this.items[i])) !== -1)) {\n indexes.push(i);\n }\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var indexes = this.getItemsIndex(ids);\n if (indexes.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < indexes.length; i++) {\n data[i] = this.items[indexes[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var index = this.getItemsIndex(ids);\n if (index.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < index.length; i++) {\n data[i] = this.items[index[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n this.doOpenAction(this.itemList[indexes[0]]);\n }\n };\n LargeIconsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n updateRenamingData(this.parent, this.items[indexes[0]]);\n if (isNOU(name)) {\n doRename(this.parent);\n }\n else {\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n rename(this.parent, this.parent.path, name);\n }\n }\n }\n };\n return LargeIconsView;\n}());\nexport { LargeIconsView };\n","import { EventHandler, closest, isNullOrUndefined, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, addClass, removeClass, remove, createElement } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { read } from '../common/operations';\nimport { getLocaleText, searchWordHandler } from '../common/utility';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * BreadCrumbBar module\n */\nvar BreadCrumbBar = /** @class */ (function () {\n /**\n * constructor for addressbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies parent element.\n * @private\n *\n */\n function BreadCrumbBar(parent) {\n this.addressPath = '';\n this.addressBarLink = '';\n this.searchTimer = null;\n this.searchWrapWidth = null;\n this.parent = parent;\n this.keyConfigs = {\n enter: 'enter'\n };\n this.render();\n }\n BreadCrumbBar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var value = e.newProp.searchSettings;\n switch (prop) {\n case 'searchSettings':\n if (!isNullOrUndefined(value.allowSearchOnTyping)) {\n this.searchEventBind(value.allowSearchOnTyping);\n }\n if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&\n !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&\n isNullOrUndefined(value.ignoreCase))) {\n searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);\n }\n break;\n }\n }\n };\n BreadCrumbBar.prototype.render = function () {\n this.addEventListener();\n };\n BreadCrumbBar.prototype.onPathChange = function () {\n var pathNames = this.parent.pathNames;\n var paths = this.parent.path.split('/');\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var addressbarLI = null;\n var pathNamesLen = pathNames.length;\n if (pathNames.length > 0) {\n var id = '';\n for (var i = 0; i < pathNamesLen; i++) {\n var addressATag = null;\n addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });\n for (var j = 0; j <= i; j++) {\n id = id + paths[j] + '/';\n }\n addressbarLI.setAttribute('data-utext', id);\n if (i !== 0) {\n var icon = createElement('span', { className: CLS.ICONS });\n addressbarLI.appendChild(icon);\n }\n if (pathNamesLen - i !== 1) {\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressbarLI.setAttribute('tabindex', '0');\n }\n else {\n addressATag = createElement('span', { className: CLS.LIST_TEXT });\n }\n id = '';\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n // eslint-disable-next-line\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n // eslint-disable-next-line\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n // eslint-disable-next-line\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n // eslint-disable-next-line\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n };\n ContextMenu.prototype.onBeforeClose = function () {\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1) {\n this.parent.pathId.pop();\n this.parent.pathId.push(Object.keys(this.parent.feParent)[Object.keys.length]);\n this.parent.navigationpaneModule.treeObj.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n this.disabledItems = [];\n var selected = false;\n var uid;\n // eslint-disable-next-line\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest(\"div\");\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n // eslint:disable-next-line\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n // eslint:disable-next-line\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n // eslint:disable-next-line\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n // eslint-disable-next-line\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n // eslint-disable-next-line\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('data-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n /* istanbul ignore next */\n // eslint:disable-next-line\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n this.disabledItems.push('Paste');\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.parent.navigationpaneModule.treeObj.selectedNodes[0] + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n }\n else if (this.parent.selectedItems.length !== 1 && this.parent.activeModule !== 'navigationpane') {\n this.disabledItems.push('Rename', 'Paste');\n }\n };\n ContextMenu.prototype.setFileItem = function () {\n this.menuType = 'file';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.file.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (this.parent.selectedItems.length !== 1) {\n this.disabledItems.push('Rename');\n }\n };\n ContextMenu.prototype.setLayoutItem = function (target) {\n this.menuType = 'layout';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.layout.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (!this.parent.allowMultiSelection || ((this.parent.view === 'LargeIcons' &&\n (closest(target, '#' + this.parent.element.id + CLS.LARGEICON_ID).getElementsByClassName(CLS.EMPTY).length !== 0))\n || (this.parent.view === 'Details' &&\n (closest(target, '#' + this.parent.element.id + CLS.GRID_ID).getElementsByClassName(CLS.EMPTY).length !== 0)))) {\n this.disabledItems.push('SelectAll');\n }\n if (this.parent.selectedNodes.length === 0) {\n this.disabledItems.push('Paste');\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n else {\n return -1;\n }\n };\n // eslint-disable-next-line\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n // eslint-disable-next-line\n var args = { target: this.menuTarget };\n this.parent.notify(events.menuItemData, args);\n return this.parent.itemData[0];\n }\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onSelect = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var itemText = args.item.id.substr((this.parent.element.id + '_cm_').length);\n // eslint-disable-next-line\n var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n _this.isMenuItemClicked = true;\n // eslint:disable-next-line\n switch (itemText) {\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'paste':\n if (_this.menuType === 'folder') {\n if ((_this.parent.activeModule === 'largeiconsview') || (_this.parent.activeModule === 'detailsview')) {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n else {\n _this.parent.folderPath = '';\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n /* istanbul ignore next */\n case 'name':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'size':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'date':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'ascending':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\n// eslint-disable-next-line\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n // eslint-disable-next-line\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n // eslint-disable-next-line\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n // eslint-disable-next-line\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n // eslint-disable-next-line\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n // eslint-disable-next-line\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not \n _this.isMac = false;\n FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);\n return _this;\n }\n FileManager_1 = FileManager;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n FileManager.prototype.getModuleName = function () {\n return 'filemanager';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n FileManager.prototype.preRender = function () {\n if (isNOU(this.element.id) || this.element.id === '') {\n this.element.setAttribute('id', getUniqueID('filemanager'));\n }\n this.ensurePath();\n this.feParent = [];\n this.feFiles = [];\n setAttr(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.isDevice = Browser.isDevice;\n this.isMobile = this.checkMobile();\n if (this.isMobile) {\n this.setProperties({ navigationPaneSettings: { visible: false } }, true);\n }\n var ele = closest(this.element, '.e-bigger');\n this.isBigger = ele ? true : false;\n this.activeModule = (this.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n createSpinner({ target: this.element }, createElement);\n this.addWrapper();\n this.keyConfigs = {\n altN: 'alt+n',\n f5: 'f5',\n ctrlShift1: 'ctrl+shift+1',\n ctrlShift2: 'ctrl+shift+2',\n ctrlU: 'ctrl+u'\n };\n this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale);\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string} - returns the persisted data.\n * @hidden\n */\n FileManager.prototype.getPersistData = function () {\n var keyEntity = ['view', 'path', 'selectedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n FileManager.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'breadcrumbbar',\n args: [this]\n });\n modules.push({\n member: 'largeiconsview',\n args: [this]\n });\n if (this.toolbarSettings.visible) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this]\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this]\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n FileManager.prototype.render = function () {\n this.initialize();\n var slItems = isNOU(this.selectedItems) ? [] :\n this.allowMultiSelection ? this.selectedItems : this.selectedItems.slice(this.selectedItems.length - 1);\n this.setProperties({ selectedItems: slItems }, true);\n this.fileView = this.view;\n this.isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n this.setRtl(this.enableRtl);\n this.addEventListeners();\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n this.adjustHeight();\n if (isNOU(this.navigationpaneModule)) {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n this.wireEvents();\n this.renderComplete();\n };\n FileManager.prototype.ensurePath = function () {\n var currentPath = this.path;\n if (isNOU(currentPath)) {\n currentPath = '/';\n }\n if (currentPath.lastIndexOf('/') !== (currentPath.length - 1)) {\n currentPath = currentPath + '/';\n }\n this.originalPath = currentPath;\n var paths = currentPath.split('/');\n this.setProperties({ path: paths[0] + '/' }, true);\n this.pathNames = [];\n this.pathId = ['fe_tree'];\n this.itemData = [];\n };\n FileManager.prototype.initialize = function () {\n if (this.isMobile) {\n addClass([this.element], CLS.MOBILE);\n }\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n this.addCssClass(null, this.cssClass);\n this.renderFileUpload();\n };\n FileManager.prototype.addWrapper = function () {\n var headerWrap = this.createElement('div', { id: this.element.id + CLS.TOOLBAR_ID });\n this.element.appendChild(headerWrap);\n var layoutWrap = this.createElement('div', {\n id: this.element.id + CLS.LAYOUT_ID, className: CLS.LAYOUT\n });\n this.element.appendChild(layoutWrap);\n var navigationWrap = this.createElement('div', {\n id: this.element.id + CLS.NAVIGATION_ID, className: CLS.NAVIGATION\n });\n var treeWrap = this.createElement('div', {\n id: this.element.id + CLS.TREE_ID\n });\n navigationWrap.appendChild(treeWrap);\n var contentWrap = this.createElement('div', {\n id: this.element.id + CLS.CONTENT_ID, className: CLS.LAYOUT_CONTENT\n });\n this.breadCrumbBarNavigation = this.createElement('div', {\n id: this.element.id + CLS.BREADCRUMBBAR_ID,\n className: CLS.BREADCRUMBS\n });\n contentWrap.appendChild(this.breadCrumbBarNavigation);\n var gridWrap = this.createElement('div', {\n id: this.element.id + CLS.GRID_ID\n });\n contentWrap.appendChild(gridWrap);\n var largeiconWrap = this.createElement('div', {\n id: this.element.id + CLS.LARGEICON_ID,\n className: CLS.LARGE_ICONS, attrs: { 'role': 'group' }\n });\n contentWrap.appendChild(largeiconWrap);\n var overlay = this.createElement('span', { className: CLS.OVERLAY });\n contentWrap.appendChild(overlay);\n var paneSettings;\n if (!this.enableRtl) {\n layoutWrap.appendChild(navigationWrap);\n layoutWrap.appendChild(contentWrap);\n paneSettings = [\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n },\n { size: '75%', min: '270px' }\n ];\n }\n else {\n layoutWrap.appendChild(contentWrap);\n layoutWrap.appendChild(navigationWrap);\n paneSettings = [\n { size: '75%', min: '270px' },\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n }\n ];\n }\n this.splitterObj = new Splitter({\n paneSettings: paneSettings,\n width: '100%',\n enableRtl: false,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n resizing: this.splitterResize.bind(this)\n });\n this.splitterObj.isStringTemplate = true;\n this.splitterObj.appendTo(layoutWrap);\n var dialogWrap = this.createElement('div', { id: this.element.id + CLS.DIALOG_ID });\n this.element.appendChild(dialogWrap);\n var menuWrap = this.createElement('ul', { id: this.element.id + CLS.CONTEXT_MENU_ID });\n this.element.appendChild(menuWrap);\n var dialogImgWrap = this.createElement('div', { id: this.element.id + CLS.IMG_DIALOG_ID });\n this.element.appendChild(dialogImgWrap);\n var extnDialogWrap = this.createElement('div', { id: this.element.id + CLS.EXTN_DIALOG_ID });\n this.element.appendChild(extnDialogWrap);\n var uploadDialogWrap = this.createElement('div', { id: this.element.id + CLS.UPLOAD_DIALOG_ID });\n this.element.appendChild(uploadDialogWrap);\n };\n FileManager.prototype.adjustHeight = function () {\n var toolbar = select('#' + this.element.id + CLS.TOOLBAR_ID, this.element);\n var toolBarHeight = toolbar ? toolbar.offsetHeight : 0;\n if (this.splitterObj) {\n this.splitterObj.height = (this.element.clientHeight - toolBarHeight).toString();\n this.splitterObj.dataBind();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.splitterResize = function () {\n this.notify(events.splitterResize, {});\n };\n FileManager.prototype.splitterAdjust = function () {\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n if (this.navigationPaneSettings.visible) {\n this.splitterObj.expand(this.enableRtl ? 1 : 0);\n bar.classList.remove(CLS.DISPLAY_NONE);\n }\n else {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n };\n FileManager.prototype.addCssClass = function (oldOne, newOne) {\n if (!isNOU(oldOne) && oldOne !== '') {\n removeClass([this.element], oldOne.split(' '));\n }\n if (!isNOU(newOne) && newOne !== '') {\n addClass([this.element], newOne.split(' '));\n }\n };\n FileManager.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n FileManager.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n FileManager.prototype.onContextMenu = function (e) {\n e.preventDefault();\n };\n FileManager.prototype.checkMobile = function () {\n return (/iphone|ipod|android|blackberry|opera|mini|windows\\sce|palm|smartphone|iemobile/i.test(Browser.userAgent.toLowerCase())\n && /mobile/i.test(Browser.userAgent.toLowerCase()));\n };\n FileManager.prototype.renderFileUpload = function () {\n var id = this.element.id + CLS.UPLOAD_ID;\n var uploadEle = this.createElement('input', { id: id, attrs: { name: 'uploadFiles', type: 'file' } });\n this.element.appendChild(uploadEle);\n this.uploadDialogObj = new Dialog({\n header: getLocaleText(this, 'Header-Upload'),\n content: uploadEle,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: false,\n isModal: true,\n width: '350px',\n target: this.popupTarget ? this.popupTarget : '#' + this.element.id,\n cssClass: getCssClass(this, this.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: this.locale,\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n enableRtl: this.enableRtl,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n open: this.onOpen.bind(this),\n close: this.onClose.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n this.uploadDialogObj.appendTo('#' + this.element.id + CLS.UPLOAD_DIALOG_ID);\n this.renderUploadBox();\n };\n FileManager.prototype.renderUploadBox = function () {\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n this.uploadObj = new Uploader({\n dropArea: select('#' + this.element.id + CLS.CONTENT_ID, this.element),\n asyncSettings: {\n saveUrl: uploadUrl,\n removeUrl: uploadUrl\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n removing: this.onRemoving.bind(this),\n canceling: this.onCancel.bind(this),\n clearing: this.onClearing.bind(this),\n selected: this.onSelected.bind(this),\n success: this.onUploadSuccess.bind(this),\n failure: this.onUploadFailure.bind(this),\n autoUpload: this.uploadSettings.autoUpload,\n minFileSize: this.uploadSettings.minFileSize,\n maxFileSize: this.uploadSettings.maxFileSize,\n allowedExtensions: this.uploadSettings.allowedExtensions,\n directoryUpload: this.uploadSettings.directoryUpload,\n fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n // eslint-disable-next-line\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n // eslint-disable-next-line\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n // eslint-disable-next-line\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n // eslint-disable-next-line\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n FileManager.prototype.onUploadSuccess = function (files) {\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n FileManager.prototype.onUploadFailure = function (files) {\n // eslint-disable-next-line\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') != -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n FileManager.prototype.unWireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeHandler);\n this.keyboardModule.destroy();\n };\n FileManager.prototype.setPath = function () {\n this.setProperties({ selectedItems: [] }, true);\n this.ensurePath();\n this.notify(events.clearPathInit, { selectedNode: this.pathId[0] });\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {FileManager} newProp\n * @param {FileManager} oldProp\n * @returns void\n * @private\n */\n /* istanbul ignore next */\n // eslint:disable-next-line\n FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var height;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'ajaxSettings':\n this.ajaxSettingSetModel(newProp);\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'allowMultiSelection':\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n else {\n if (this.selectedItems.length > 1) {\n this.setProperties({ selectedItems: this.selectedItems.slice(this.selectedItems.length - 1) }, true);\n }\n removeClass([this.element], CLS.CHECK_SELECT);\n }\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'cssClass':\n this.addCssClass(oldProp.cssClass, newProp.cssClass);\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'detailsViewSettings':\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableRtl':\n this.enableRtl = newProp.enableRtl;\n this.refresh();\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n this.refresh();\n break;\n case 'height':\n height = !isNOU(newProp.height) ? formatUnit(newProp.height) : newProp.height;\n setAttr(this.element, { 'height': height });\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'locale':\n if (!isNOU(newProp.enableRtl)) {\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n }\n this.localeSetModelOption(newProp);\n break;\n case 'navigationPaneSettings':\n this.splitterAdjust();\n this.notify(events.modelChanged, { module: 'navigationpane', newProp: newProp, oldProp: oldProp });\n break;\n case 'path':\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n refresh(this);\n this.notify(events.sortByChange, {});\n if (this.view === 'Details') {\n this.notify(events.sortColumn, {});\n }\n break;\n case 'popupTarget':\n if (this.uploadDialogObj) {\n this.uploadDialogObj.target = newProp.popupTarget;\n }\n if (this.dialogObj) {\n this.dialogObj.target = newProp.popupTarget;\n }\n if (this.extDialogObj) {\n this.extDialogObj.target = newProp.popupTarget;\n }\n if (this.viewerObj) {\n this.viewerObj.target = newProp.popupTarget;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n // eslint-disable-next-line\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n // eslint-disable-next-line\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n // eslint-disable-next-line\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: largeIconSpan + getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: gridSpan + getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>'\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = __assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add(\"e-virtual-top\");\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add(\"e-virtual-bottom\");\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n * @param dataSourceLength The length of the data source.\n * @returns The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount = Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) / (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount * (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n * @param destroy - Set `true` to unwire the scroll event.\n */\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n // Wire the scroll event\n EventHandler.add(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll, this);\n }\n else {\n // Unwire the scroll event\n EventHandler.remove(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll);\n }\n };\n /**\n * Handles the scroll event for the list element.\n * This method updates the top and bottom elements and the displayed items based on the scroll position.\n */\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n // Set the starting height to 0\n var startingHeight = 0;\n // Get the current scroll position\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n // Calculate the height of the top element\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n // Calculate the height of the bottom element\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n // If the scroll position is less than or equal to the total height, set the top and bottom element heights.\n // Otherwise, set the top element height to the total height and the bottom element height to 0.\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n // If the top element height has changed, update the top and bottom element heights and re-render the items.\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n // Check whether the scroll direction is upward or downward\n if (scroll > this.scrollPosition) {\n // Scrolling is upward\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n this.onNormalScroll(listDiff, true);\n }\n else {\n // Scrolling is downward\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n this.onNormalScroll(listDiff, false);\n }\n }\n // Update the list difference and scroll position variables\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n this.scrollPosition = scroll;\n // Update the list of items and the items property of the largeIconInstance\n this.largeIconInstance.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.largeIconInstance.element));\n this.largeIconInstance.items = this.largeIconInstance.allItems.slice(this.renderedCount -\n this.itemCount, this.renderedCount);\n };\n /**\n * Calculates the current scroll position of the list element.\n * @param startingHeight The starting height from which to calculate the scroll position.\n * @returns The current scroll position.\n */\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n // If the scroll position is less than or equal to the starting height, return 0.\n // Otherwise, return the scroll position minus the starting height.\n return ((this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight) <= 0) ? 0 :\n (this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight);\n };\n /**\n * This method updates the displayed items and the selection based on the scroll direction.\n * @param listDiff The number of rows to update.\n * @param isScrollingDown If set to true, the scroll direction is downward.\n */\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n // Update the displayed items\n for (var i = 0; i < listDiff; i++) {\n this.updateUI(isScrollingDown);\n }\n };\n /**\n * Updates the items in the large icons view.\n * @param isScrollingDown If set to true, the scroll direction is downward.\n */\n Virtualization.prototype.updateUI = function (isScrollingDown) {\n var _this = this;\n if (isScrollingDown) {\n // Get the next batch of items to be displayed\n this.items = this.largeIconInstance.allItems.slice(this.renderedCount, this.renderedCount + this.rowItemCount);\n // If there are items to be displayed, create list elements for them and append them to the list\n if (this.items.length > 0) {\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n this.itemList.forEach(function (liEle) {\n _this.largeIconInstance.element.firstElementChild.insertBefore(liEle, _this.bottomElement);\n });\n // Update the rendered count variable\n this.renderedCount = (this.largeIconInstance.allItems.length >= this.renderedCount + this.rowItemCount) ?\n this.renderedCount + this.rowItemCount : this.renderedCount + this.lastRowCount;\n // Remove the first batch of items from the list\n for (var i = 0; i < this.rowItemCount; i++) {\n detach(this.topElement.nextElementSibling);\n }\n }\n }\n else {\n // Scrolling up\n var lastItemIndex = void 0;\n var isAllRendered = void 0;\n if (this.renderedCount === this.largeIconInstance.allItems.length) {\n // Set lastItemIndex to the last item in the last row\n lastItemIndex = this.renderedCount - (this.itemCount - this.rowItemCount + this.lastRowCount);\n // Set renderedCount to the total number of items that have been rendered, except for the items in the last row\n this.renderedCount = ((this.renderedCount - this.lastRowCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.lastRowCount);\n // Set isAllRendered to true to indicate that all items have been rendered\n isAllRendered = true;\n }\n else {\n // Set lastItemIndex to the last item in the current row\n lastItemIndex = this.renderedCount - this.itemCount;\n // Set renderedCount to the total number of items that have been rendered, except for the items in the current row\n this.renderedCount = ((this.renderedCount - this.rowItemCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.rowItemCount);\n }\n // Set startItemIndex to the first item in the current or previous row\n var startItemIndex = (lastItemIndex - this.rowItemCount > 0) ? lastItemIndex - this.rowItemCount : 0;\n // Set the items array to the items in the current or previous row\n this.items = this.largeIconInstance.allItems.slice(startItemIndex, lastItemIndex);\n if (this.items.length > 0) {\n // Create a list of elements from the items array\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n // Set the itemList array to the list items in the list elements\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Add the items to the beginning of the list\n for (var len = this.itemList.length; len > 0; len--) {\n this.largeIconInstance.element.firstElementChild.insertBefore(this.itemList[len - 1], this.topElement.nextElementSibling);\n }\n // Remove the last row of items from the list\n for (var i = 0; i < ((isAllRendered) ? this.lastRowCount : this.rowItemCount); i++) {\n detach(this.bottomElement.previousElementSibling);\n }\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n /**\n * Destroys the component.\n */\n Virtualization.prototype.destroy = function () {\n // If the file manager has already been destroyed, return immediately\n if (this.filemanagerInstance.isDestroyed) {\n return;\n }\n // If the large icon element has a child element, unwire the scroll event\n if (!isNullOrUndefined(this.largeIconInstance.element.firstElementChild)) {\n this.wireScrollEvent(true);\n }\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { createDialog } from '../pop-up/dialog';\nimport { updatePath, getPath, getDirectories } from '../common/utility';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getDirectoryPath, getModule, getPathId } from '../common/index';\nimport { copyFiles, cutFiles, removeActive, pasteHandler, getParentPath, readDropPath } from '../common/index';\nimport { hasEditAccess, createDeniedDialog, hasDownloadAccess, getAccessClass } from '../common/index';\n/**\n * NavigationPane module\n */\nvar NavigationPane = /** @class */ (function () {\n /**\n * Constructor for the TreeView module\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n /* istanbul ignore next */\n function NavigationPane(parent) {\n this.removeNodes = [];\n this.moveNames = [];\n this.expandTree = false;\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n // eslint-disable-next-line\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n // eslint-disable-next-line\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n // eslint-disable-next-line\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n // eslint-disable-next-line\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n // eslint-disable-next-line\n var directories = getDirectories(files);\n if (directories.length > 0 &&\n (directories[0].filterPath == null || this.getTreeData(target)[0].filterPath == null || directories[0].filterPath !== this.getTreeData(target)[0].filterPath)) {\n var length_1 = 0;\n // eslint-disable-next-line\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line\n folders[length_1]._fm_icon = 'e-fe-folder';\n // eslint-disable-next-line\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n // eslint-disable-next-line\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n // eslint-disable-next-line\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.selectedNodes = [args.node.getAttribute(\"data-uid\")];\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n // eslint-disable-next-line\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.selectedNodes = [node.getAttribute('data-uid')];\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\n // eslint-disable-next-line\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.selectedItems = [];\n this.parent.itemData = nodeData;\n var previousPath = this.parent.path;\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n if (!this.isRightClick && this.isSameNodeClicked) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.isNodeClickCalled = true;\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n NavigationPane.prototype.onPathDrag = function (args) {\n this.isPathDragged = true;\n this.selectResultNode(args[0]);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpand = function (args) {\n if (!args.isInteracted && !this.isDrag) {\n return;\n }\n if (args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n var text = getValue('text', args.nodeData);\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? text : id;\n var path = getPath(args.node, newText, isId);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n this.isNodeExpandCalled = true;\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n // eslint-disable-next-line\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], !this.expandTree);\n }\n this.expandNodeTarget = '';\n }\n this.expandTree = false;\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.selectedNodes = [sleId];\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.addChild(args.files, id, false);\n this.treeObj.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.expandTree = this.treeObj.expandedNodes.indexOf(this.treeObj.selectedNodes[0]) !== -1;\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEnd = function (args) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.updateTree(args);\n }\n else {\n // eslint-disable-next-line\n var data = this.treeObj.getTreeData();\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(data).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(data).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.currentItemText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n this.renameParent = getValue(this.treeObj.fields.parentID, resultData[0]);\n this.parent.expandedId = this.renameParent;\n this.parent.itemData = this.getTreeData(this.renameParent);\n read(this.parent, events.renameEndParent, this.parent.filterPath.replace(/\\\\/g, '/'));\n }\n }\n };\n NavigationPane.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.addDragDrop();\n break;\n case 'navigationPaneSettings':\n read(this.parent, events.finalizeEnd, '/');\n if (e.oldProp.navigationPaneSettings.sortOrder !== e.newProp.navigationPaneSettings.sortOrder) {\n this.treeObj.sortOrder = e.newProp.navigationPaneSettings.sortOrder;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDownLoadInit = function () {\n this.doDownload();\n };\n NavigationPane.prototype.onSelectionChanged = function (e) {\n this.treeObj.selectedNodes = [e.selectedNode];\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n // eslint-disable-next-line\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n // eslint-disable-next-line\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n // eslint-disable-next-line\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n // eslint-disable-next-line\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (this.parent.hasId) {\n this.parent.isDropEnd = !this.parent.isPasteError;\n readDropPath(this.parent);\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n // eslint-disable-next-line\n var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n // eslint-disable-next-line\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n // eslint-disable-next-line\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n // eslint-disable-next-line\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n // eslint-disable-next-line\n NavigationPane.prototype.getTreeData = function (args) {\n // eslint-disable-next-line\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n // eslint-disable-next-line\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\nimport { removeBlur, openAction, getImageUrl, fileType, getSortedData, getLocaleText, updateLayout } from '../common/utility';\nimport { createEmptyElement } from '../common/utility';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { cutFiles, addBlur, openSearchFolder, copyFiles, removeActive, pasteHandler, getPathObject, getName } from '../common/index';\nimport { hasReadAccess, hasEditAccess, hasDownloadAccess, doRename, getAccessClass, createDeniedDialog, rename } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule, getFullPath } from '../common/index';\nimport { getDirectoryPath, updateRenamingData, getItemName, doDeleteFiles, doDownloadFiles } from '../common/index';\n/**\n * DetailsView module\n */\nvar DetailsView = /** @class */ (function () {\n /**\n * Constructor for the GridView module\n *\n * @param {FileManager} parent - specifies the parent.\n * @hidden\n */\n function DetailsView(parent) {\n this.isInteracted = true;\n this.interaction = true;\n this.isPasteOperation = false;\n this.isColumnRefresh = false;\n this.dragObj = null;\n this.startIndex = null;\n this.firstItemIndex = null;\n this.isSelectionUpdate = false;\n this.currentSelectedItem = [];\n this.count = 0;\n this.isRendered = true;\n this.isLoaded = false;\n this.isNameWidth = false;\n this.pasteOperation = false;\n this.uploadOperation = false;\n /* istanbul ignore next */\n // eslint:disable-next-line\n this.actionDivert = false;\n Grid.Inject(Resize, ContextMenu, Sort, VirtualScroll);\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.GRID_ID, this.parent.element);\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n tab: 'tab',\n moveDown: 'downarrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n ctrlUp: 'ctrl+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n end: 'end',\n home: 'home',\n moveUp: 'uparrow',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n if (this.parent.isMobile) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick',\n persistSelection: (this.parent.enableVirtualization) ? true : false\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n // eslint-disable-next-line\n load: function (args) {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent[\"portals\"] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent[\"portals\"] = this.parent[\"portals\"].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent[\"portals\"]);\n this.parent[\"renderReactTemplates\"]();\n };\n /**\n * Gets the grid height.\n *\n * @returns The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n return \"<div class=\\\"e-fe-text\\\">\" + data.name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div>' +\\n '<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].headerText = getLocaleText(this.parent, columns[i].headerText);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return \"<span class=\\\"e-fe-icon e-fe-folder\\\"></span>\";\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var textEle = args.row.querySelector('.e-fe-text');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n // eslint-disable-next-line\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n // eslint-disable-next-line\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n showSpinner(this.parent.element);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, (this.parent.enableVirtualization) ? args.result : this.gridObj.dataSource);\n args.result = items;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) ||\n ((this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization &&\n this.element.querySelector('.e-content').scrollTop == 0))) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.parent.createdItem) {\n this.selectRecords([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n }\n if (this.parent.layoutSelectedItems.length) {\n this.selectRecords(this.parent.layoutSelectedItems);\n }\n if (this.parent.renamedItem) {\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var items = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n // eslint-disable-next-line\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n // eslint-disable-next-line\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n // eslint-disable-next-line\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imgUrl);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath')) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n // eslint-disable-next-line\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n // eslint-disable-next-line\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n // eslint-disable-next-line\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 180px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 180px');\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n // eslint-disable-next-line\n var info = null;\n // eslint-disable-next-line\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n // eslint-disable-next-line\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n // eslint-disable-next-line\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n this.gridObj.getRowByIndex(args.rowIndex).removeAttribute('tabindex');\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n this.gridObj.getRowByIndex(lastItemIndex).querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n proxy_1.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (proxy_1.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', proxy_1.parent.allowMultiSelection, proxy_1.gridObj.selectionModule);\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = proxy_1.gridObj.getRows().indexOf(row);\n proxy_1.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('data-rowindex'), 10) : null;\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n // eslint-disable-next-line\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focItem = this.getFocusedItem();\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n // eslint-disable-next-line\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1) {\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n // eslint-disable-next-line\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else if (!this.actionDivert) {\n this.addHeaderFocus();\n this.actionDivert = true;\n }\n else {\n this.addFocus(0);\n this.actionDivert = false;\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n // eslint-disable-next-line\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n // eslint-disable-next-line\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n // eslint-disable-next-line\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n // eslint-disable-next-line\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n // eslint-disable-next-line\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function () {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus = select('th.e-fe-grid-name', this.element);\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n // eslint-disable-next-line\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.getRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n // eslint-disable-next-line\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","length","ids","push","names","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","searchSettings","filterType","itemData","getPathObject","caseSensitive","ignoreCase","hiddenItems","showHiddenItems","Search","events.layoutChange","events.search","filter","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","read","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","toLowerCase","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","replace","eventArgs","fileDetails","imageUrl","Date","getTime","toString","trigger","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","Query","sortBy","group","lists","DataManager","executeLocal","getObject","currFiles","feFiles","where","createEmptyElement","top","layoutElement","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","localeString","dateFormat","createdDate","modifiedDate","formatDate","format","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","isRoot","searchData","isNullOrUndefined","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","srcData","dragNodes","tempTarget","dropHandler","dragData","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","navigationpaneModule","treeObj","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","uploadObj","dropArea","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","screenY","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","Array","isArray","events.renameEndParent","events.pathChanged","renameText","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","replaceItems","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","index","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","splice","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","location","multipleFiles","onDeleteSubmit","modified","CLS.VALUE","size","index_1","undefined","map","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","isPrimaryKey","template","initializeCSPTemplate","customAttributes","class","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","CLS.DISPLAY_NONE","enableVirtualization","adjustHeight","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","slice","call","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","ondragstart","_this","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","pane","bar","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","name_1","selected","showThumbnail","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","cList","CLS.CHECK","triggerSelection","startIndex","endIndex","addActive","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","parseInt","getPropertyValue","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","link","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","pasteEle","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","splitterAdjust","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","uploading","onUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","uploadSettings","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","fileData","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","__assign","assign","t","s","n","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","viewText","mergedItems","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","firstChild","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","Math","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","forEach","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getTreeData","getDragPath","getDropPath","nodeData","addChild","prevent","directories","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","obj","itemname","checkDropPath","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","actionDivert","Grid","Resize","Sort","VirtualScroll","checkNameWidth","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","persistSelection","pageSettings","pageSize","enablePersistence","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","reactTemplateRender","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","_fm_modified","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","includes","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","check","getRecords","hasFilter","name_4","dRecords","index.FileManager","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-filemanager.min.js","sources":["../../src/file-manager/common/utility.js","../../src/file-manager/common/operations.js","../../src/file-manager/pop-up/dialog.js","../../src/file-manager/models/ajax-settings.js","../../src/file-manager/models/toolbar-settings.js","../../src/file-manager/models/search-settings.js","../../src/file-manager/models/details-view-settings.js","../../src/file-manager/models/contextMenu-settings.js","../../src/file-manager/models/navigation-pane-settings.js","../../src/file-manager/models/upload-settings.js","../../src/file-manager/models/column.js","../../src/file-manager/base/classes.js","../../src/file-manager/base/constant.js","../../src/file-manager/layout/large-icons-view.js","../../src/file-manager/actions/breadcrumb-bar.js","../../src/file-manager/pop-up/context-menu.js","../../src/file-manager/models/default-locale.js","../../src/file-manager/base/file-manager.js","../../src/file-manager/actions/toolbar.js","../../src/file-manager/actions/virtualization.js","../../src/file-manager/layout/navigation-pane.js","../../src/file-manager/layout/details-view.js","../../src/global.js"],"sourcesContent":["import * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { read, paste, Search, filter, Download, Delete } from '../common/operations';\nimport { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, detach } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createDialog } from '../pop-up/dialog';\n/**\n * Utility file for common actions\n *\n * @param {HTMLLIElement} node - specifies the node.\n * @param {Object} data - specifies the data.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function updatePath(node, data, instance) {\n var text = getValue('name', data);\n var id = node.getAttribute('data-id');\n var newText = isNOU(id) ? text : id;\n instance.setProperties({ path: getPath(node, newText, instance.hasId) }, true);\n instance.pathId = getPathId(node);\n instance.pathNames = getPathNames(node, text);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId) {\n var matched = getParents(element, text, false, hasId);\n var path = hasId ? '' : '/';\n var len = matched.length - (hasId ? 1 : 2);\n for (var i = len; i >= 0; i--) {\n path += matched[i] + '/';\n }\n return path;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} node - specifies the node element.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node) {\n var matched = getParents(node, node.getAttribute('data-uid'), true);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text) {\n var matched = getParents(element, text, false);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') :\n select('.' + CLS.LIST_TEXT, el).textContent);\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = parent.hasId ? '' : '/';\n var i = parent.hasId ? 0 : 1;\n for (i; i < parent.pathId.length; i++) {\n // eslint-disable-next-line\n var data = getValue(parent.pathId[i], parent.feParent);\n newPath += getValue(key, data) + '/';\n }\n parent.setProperties({ path: newPath }, true);\n}\n/**\n * Functions for remove active element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function removeActive(parent) {\n if (parent.isCut) {\n removeBlur(parent);\n parent.selectedNodes = [];\n parent.actionRecords = [];\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n }\n}\n/**\n * Selects active element in File Manager\n *\n * @param {string} action - specifies the action.\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns active element.\n * @private\n */\nexport function activeElement(action, parent) {\n parent.isSearchCut = false;\n parent.actionRecords = [];\n parent.activeElements = [];\n parent.notify(events.cutCopyInit, {});\n if (parent.activeElements.length === 0) {\n return false;\n }\n removeBlur(parent);\n var blurEle = parent.activeElements;\n if (parent.activeModule !== 'navigationpane') {\n parent.targetPath = parent.path;\n }\n else {\n parent.targetPath = getParentPath(parent.path);\n }\n var i = 0;\n if (blurEle) {\n getModule(parent, blurEle[0]);\n if (action === 'cut') {\n while (i < blurEle.length) {\n addBlur(blurEle[i]);\n i++;\n }\n }\n }\n i = 0;\n parent.selectedNodes = [];\n parent.enablePaste = true;\n parent.notify(events.showPaste, {});\n while (i < parent.activeRecords.length) {\n parent.actionRecords.push(parent.activeRecords[i]);\n parent.selectedNodes.push(getValue('name', parent.activeRecords[i]));\n i++;\n }\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) &&\n parent.activeModule !== 'navigationpane') {\n parent.selectedNodes = [];\n parent.isSearchCut = true;\n var i_1 = 0;\n while (i_1 < parent.selectedItems.length) {\n parent.selectedNodes.push(parent.selectedItems[i_1]);\n i_1++;\n }\n }\n return true;\n}\n/**\n * Adds blur to the elements\n *\n * @param {Element} nodes - specifies the nodes.\n * @returns {void}\n * @private\n */\nexport function addBlur(nodes) {\n nodes.classList.add(CLS.BLUR);\n}\n/**\n * Removes blur from elements\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} hover - specifies the hover string.\n * @returns {void}\n * @private\n */\nexport function removeBlur(parent, hover) {\n var blurEle = (!hover) ? parent.element.querySelectorAll('.' + CLS.BLUR) :\n parent.element.querySelectorAll('.' + CLS.HOVER);\n var i = 0;\n while (i < blurEle.length) {\n blurEle[i].classList.remove((!hover) ? CLS.BLUR : CLS.HOVER);\n i++;\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getModule(parent, element) {\n if (element) {\n if (element.classList.contains(CLS.ROW)) {\n parent.activeModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICON)) {\n parent.activeModule = 'largeiconsview';\n }\n else {\n parent.activeModule = 'navigationpane';\n }\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\n// eslint-disable-next-line\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\n// eslint-disable-next-line\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {string} - returns the image url.\n * @private\n */\n// eslint-disable-next-line\nexport function getImageUrl(parent, item) {\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var imgUrl;\n var fileName = encodeURIComponent(getValue('name', item));\n var fPath = getValue('filterPath', item);\n if (parent.hasId) {\n var imgId = getValue('id', item);\n imgUrl = baseUrl + pathUrl + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + pathUrl + encodeURIComponent(fPath.replace(/\\\\/g, '/')) + fileName;\n }\n else {\n imgUrl = baseUrl + pathUrl + parent.path + fileName;\n }\n imgUrl = imgUrl + '&time=' + (new Date().getTime()).toString();\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs.imageUrl;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\n// eslint-disable-next-line\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\n// eslint-disable-next-line\nexport function getName(parent, data) {\n var name = getValue('name', data);\n var fPath = getValue('filterPath', data);\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) && !isNOU(fPath)) {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(parent.path, '') + name;\n }\n return name;\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object[]} items - specifies the item elements.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None') {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n // eslint-disable-next-line\n var lists = new DataManager(items).executeLocal(query);\n return getValue('records', lists);\n}\n/**\n * Gets the data object\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} key - specifies the key.\n * @param {string} value - specifies the value.\n * @returns {Object} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getObject(parent, key, value) {\n // eslint-disable-next-line\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var query = new Query().where(key, 'equal', value);\n // eslint-disable-next-line\n var lists = new DataManager(currFiles).executeLocal(query);\n return lists[0];\n}\n/**\n * Creates empty element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLElement} element - specifies the element.\n * @param {ReadArgs | SearchArgs} args - specifies the args.\n * @returns {void}\n * @private\n */\nexport function createEmptyElement(parent, element, args) {\n var top;\n var layoutElement = select('#' + parent.element.id + CLS.LAYOUT_ID, parent.element);\n var addressBarHeight = select('#' + parent.element.id + CLS.BREADCRUMBBAR_ID, layoutElement).offsetHeight;\n top = layoutElement.offsetHeight - addressBarHeight;\n if (parent.view === 'Details') {\n top = top - select('.' + CLS.GRID_HEADER, layoutElement).offsetHeight;\n }\n if (isNOU(element.querySelector('.' + CLS.EMPTY))) {\n var emptyDiv = createElement('div', { className: CLS.EMPTY });\n var emptyFolder = createElement('div', { className: CLS.LARGE_EMPTY_FOLDER });\n var emptyEle = createElement('div', { className: CLS.EMPTY_CONTENT });\n var dragFile = createElement('div', { className: CLS.EMPTY_INNER_CONTENT });\n if (parent.view === 'Details') {\n element.querySelector('.' + CLS.GRID_VIEW).appendChild(emptyDiv);\n }\n else {\n element.appendChild(emptyDiv);\n }\n emptyDiv.appendChild(emptyFolder);\n emptyDiv.appendChild(emptyEle);\n emptyDiv.appendChild(dragFile);\n }\n if (element.querySelector('.' + CLS.EMPTY)) {\n if (!isNOU(args.error)) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Access-Denied');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Access-Details');\n }\n else if (parent.isFiltered) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Key');\n }\n else if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Search-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Search-Key');\n }\n else {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Folder-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getDirectories(files) {\n return new DataManager(files).executeLocal(new Query().where(events.isFile, 'equal', false, false));\n}\n/**\n * set the Node ID\n *\n * @param {ReadArgs} result - specifies the result.\n * @param {string} rootId - specifies the rootId.\n * @returns {void}\n * @private\n */\nexport function setNodeId(result, rootId) {\n // eslint-disable-next-line\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function setDateObject(args, localeString, dateFormat) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n if (isNOU(dateFormat)) {\n dateFormat = \"MM/dd/yyyy\";\n }\n setValue('_fm_created', localeString.formatDate(createdDate, { format: dateFormat }), args[i]);\n setValue('_fm_modified', localeString.formatDate(modifiedDate, { format: dateFormat }), args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n // eslint-disable-next-line\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n // eslint-disable-next-line\n var data = getObject(parent, key, folders[i]);\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n parent.pathId.push(id);\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n read(parent, eventName, parent.path);\n break;\n }\n}\n/**\n * Opens the searched folder\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function openSearchFolder(parent, data) {\n parent.originalPath = getFullPath(parent, data, parent.path);\n var root = getValue(parent.pathId[0], parent.feParent);\n var isRoot = getValue('_fm_id', parent.itemData[0]) == 'fe_tree';\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n var searchData = getObject(parent, key, getValue('name', data));\n if (isNullOrUndefined(searchData)) {\n if (!isRoot) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n }\n else {\n setNextPath(parent, parent.path);\n return;\n }\n }\n else {\n var id = getValue('_fm_id', searchData);\n parent.setProperties({ path: parent.originalPath }, true);\n parent.pathId.push(id);\n parent.itemData = [searchData];\n parent.pathNames.push(getValue('name', searchData));\n }\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n // eslint-disable-next-line\n var subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);\n if (!subFolder) {\n if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {\n parent.notify(events.pasteInit, {});\n paste(parent, parent.targetPath, parent.selectedNodes, path, parent.fileAction, [], parent.actionRecords);\n }\n else {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n removeBlur(parent);\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n }\n }\n }\n}\n/**\n * Validates the sub folders\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {'{ [key: string]: Object; }[]'} data - specifies the data.\n * @param {string} dropPath - specifies the drop path.\n * @param {string} dragPath - specifies the drag path.\n * @returns {boolean} - returns the validated sub folder.\n * @private\n */\n// eslint-disable-next-line\nexport function validateSubFolder(parent, data, dropPath, dragPath) {\n var subFolder = false;\n for (var i = 0; i < data.length; i++) {\n if (!getValue('isFile', data[i])) {\n var tempTarget = getFullPath(parent, data[i], dragPath);\n if (dropPath.indexOf(tempTarget) === 0) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Sub-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n else {\n var srcData = parent.dragNodes[i];\n var len = 0;\n if (srcData) {\n len = srcData.lastIndexOf('/');\n }\n var path = '';\n if (len > 0) {\n path = dragPath + srcData.substring(0, len + 1);\n }\n if (path === dropPath) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n }\n return subFolder;\n}\n/**\n * Validates the drop handler\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function dropHandler(parent) {\n parent.isDragDrop = true;\n if (parent.dragData.length !== 0) {\n parent.dragPath = parent.dragPath.replace(/\\\\/g, '/');\n parent.dropPath = parent.dropPath.replace(/\\\\/g, '/');\n var subFolder = validateSubFolder(parent, parent.dragData, parent.dropPath, parent.dragPath);\n if (!subFolder && (parent.dragPath !== parent.dropPath)) {\n parent.itemData = [parent.dropData];\n paste(parent, parent.dragPath, parent.dragNodes, parent.dropPath, 'move', [], parent.dragData);\n parent.notify(events.pasteInit, {});\n }\n }\n}\n/**\n * Gets the parent path\n *\n * @param {string} oldPath - specifies the old path.\n * @returns {string} - returns the parent path.\n * @private\n */\nexport function getParentPath(oldPath) {\n var path = oldPath.split('/');\n var newPath = path[0] + '/';\n for (var i = 1; i < path.length - 2; i++) {\n newPath += path[i] + '/';\n }\n return newPath;\n}\n/**\n * Gets the directory path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {ReadArgs} args - returns the read arguements.\n * @returns {string} - returns the directory path\n * @private\n */\nexport function getDirectoryPath(parent, args) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', args.cwd) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return parent.hasId ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n if (!parent.isDragDrop || (parent.path === parent.dragPath) || (parent.path === parent.dropPath)\n || parent.isSearchDrag) {\n parent.isPathDrag = false;\n read(parent, events.pasteEnd, parent.path);\n }\n else {\n readDropPath(parent);\n }\n parent.trigger('success', { action: operation, result: result });\n}\n/**\n * Reads the drop path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function readDropPath(parent) {\n var pathId = getValue('_fm_id', parent.dropData);\n parent.expandedId = pathId;\n parent.itemData = [parent.dropData];\n if (parent.isPathDrag) {\n parent.notify(events.pathDrag, parent.itemData);\n }\n else {\n if (parent.navigationpaneModule) {\n var node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n if (!node) {\n var liElement = document.querySelector('[data-id = \"' + getValue('id', parent.dropData) + '\"]');\n pathId = liElement.getAttribute(\"data-uid\");\n node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n }\n updatePath(node, parent.dropData, parent);\n }\n read(parent, events.dropPath, parent.dropPath);\n }\n}\n/**\n * Gets the duplicated path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} name - specifies the name.\n * @returns {object} - returns the duplicated path.\n * @private\n */\n// eslint-disable-next-line\nexport function getDuplicateData(parent, name) {\n // eslint-disable-next-line\n var data = null;\n // eslint-disable-next-line\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Remove item class handler\n *\n * @param {Element} scrollParent - specifies the scrolling target.\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} nodeClass - specifies the node class.\n * @param {number} screenY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the entire screen.\n * @param {number} clientY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the target element.\n * @returns {void}\n * @private\n */\nexport function scrollHandler(scrollParent, parent, nodeClass, screenY, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select(\".\" + nodeClass, scrollParent);\n if ((screenY >= (elementData.top + scrollParent.clientHeight - 30)) && !isNullOrUndefined(node)) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, position);\n }\n if (!isNullOrUndefined(node) && (clientY <= (elementData.top + 30))) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, -position);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n var scrollParent;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n scrollParent = parent.navigationpaneModule.treeObj.element.parentElement;\n scrollHandler(scrollParent, parent, 'e-level-2', args.event.screenY, args.event.y);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n scrollParent = parent.detailsviewModule.gridObj.element.querySelector('.e-content');\n scrollHandler(scrollParent, parent, 'e-row', args.event.screenY, args.event.y);\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n scrollParent = parent.largeiconsviewModule.element.firstElementChild;\n scrollHandler(scrollParent, parent, 'e-large-icon', args.event.screenY, args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\n// eslint-disable-next-line\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\n// eslint-disable-next-line\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n // eslint-disable-next-line\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function createDeniedDialog(parent, data, action) {\n var message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\n// eslint-disable-next-line\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasReadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasEditAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasContentAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasUploadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasDownloadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n // eslint-disable-next-line\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n // eslint-disable-next-line\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n","import { Ajax, createElement, select, extend, Internationalization } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath } from '../common/utility';\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n // eslint-disable-next-line\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n // eslint-disable-next-line\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n // eslint-disable-next-line\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n // eslint-disable-next-line\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n // eslint-disable-next-line\n var filterData;\n // eslint-disable-next-line\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n // eslint-disable-next-line\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, \n// eslint-disable-next-line\nrenameItems, actionRecords) {\n // eslint-disable-next-line\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n // eslint-disable-next-line\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n // eslint-disable-next-line\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Function for createAjax in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {Function} fn - specifies the fn.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the target path.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === '_fm_modified') {\n if (!isNOU(columns[i].format)) {\n dateFormat = columns[i].format.toString();\n }\n break;\n }\n }\n return dateFormat;\n}\nfunction createAjax(\n// eslint-disable-next-line\nparent, data, fn, event, operation, targetPath) {\n // eslint-disable-next-line\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n // eslint-disable-next-line\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n var intl = new Internationalization(parent.locale);\n if (!isNOU(result.files)) {\n setDateObject(result.files, intl, getDateFormat(parent));\n for (var i = 0, len = result.files.length; i < len; i++) {\n // eslint-disable-next-line\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(\n// eslint-disable-next-line\nparent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: action, result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, action);\n }\n}\n/* istanbul ignore next */\n/**\n * Function for create success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction createSuccess(parent, result, itemName) {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var args = { action: 'create', result: result };\n parent.trigger('success', args);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.createEnd, parent.path);\n }\n else {\n if (result.error.code === '400') {\n if (parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#newname', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n else {\n var result_2 = {\n files: null,\n error: {\n code: '400',\n message: getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + itemName + '\"'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result_2);\n }\n var args = { action: 'create', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'create');\n }\n }\n}\n/* istanbul ignore next */\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result, path) {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n if (parent.activeModule === 'navigationpane') {\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/'));\n parent.itemData[0] = parent.renamedItem;\n read(parent, events.pathChanged, parent.path === '/' ? parent.path : getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/') + parent.renamedItem.name + '/');\n if (getValue('filterPath', parent.renamedItem) === getValue('filterPath', parent.itemData[0]) && parent.pathNames.length > 1) {\n parent.pathNames[parent.pathNames.length - 1] = parent.renameText;\n }\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(\n// eslint:disable-next-line\nparent, event, path, searchString, showHiddenItems, caseSensitive) {\n // eslint-disable-next-line\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n // eslint-disable-next-line\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var eventArgs = { data: data, cancel: false };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n });\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @param {string[]} replaceItems - specifies the replacement.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details, replaceItems) {\n var options = getOptions(parent, text, e, details, replaceItems);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details, replaceItems) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function (e) {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n var index_1;\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index_1 = val.name.indexOf('.') + 1;\n return (index_1 === 0 && (!val.isFile)) ? 'Folder' : ((index_1 !== 0) ? val.name.substr(index_1).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] == undefined) {\n strArr = details.name.split(',').map(function (val) {\n index_1 = val.indexOf('.') + 1;\n return (index_1 === 0) ? 'Folder' : val.substr(index_1).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {SelectedEventArgs} data - specifies the data.\n * @returns {HTMLElement} - returns the HTML element.\n * @private\n */\nfunction getFilesName(data) {\n var parent = createElement('div', { id: 'uploadDialog' });\n var ulElement = createElement('ul');\n var filesData = data.isModified ? data.modifiedFilesData : data.filesData;\n for (var fileCount = 0; fileCount < filesData.length; fileCount++) {\n var liElement = createElement('li', { className: 'dialogFiles' });\n liElement.innerHTML = filesData[fileCount].name;\n ulElement.appendChild(liElement);\n }\n parent.appendChild(ulElement);\n var errorTag = createElement('div', { className: 'e-fe-error' });\n parent.appendChild(errorTag);\n return parent;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = (parent.activeModule === 'navigationpane') ? getValue('filterPath', parent.itemData[0]).replace(/\\\\/g, '/') : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120, isPrimaryKey: true,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-text\\\">\" + data.name + \"</span>\";\n }),\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n this.items = [];\n this.items = this.renderList(args);\n this.items = this.allItems = getSortedData(this.parent, this.items);\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n if (!this.element.style.height) {\n this.adjustHeight();\n }\n this.parent.virtualizationModule.setUIVirtualization();\n }\n // eslint-disable-next-line\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.listElements.setAttribute(\"aria-label\", \"listbox\");\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.adjustHeight();\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: false,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n // eslint-disable-next-line\n this.parent.dragData.push(this.getItemObject(activeEle[i]));\n this.parent.activeElements.push(activeEle[i]);\n }\n getModule(this.parent, dragLi);\n this.parent.dragPath = this.parent.path;\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n LargeIconsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, '.e-list-item');\n // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n // eslint-disable-next-line\n var info = this.getItemObject(dropLi);\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n else {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n LargeIconsView.prototype.getModuleName = function () {\n return 'largeiconsview';\n };\n LargeIconsView.prototype.adjustHeight = function () {\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n this.element.style.height = (pane.offsetHeight - bar.offsetHeight) + 'px';\n };\n LargeIconsView.prototype.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n this.renderCheckbox(args);\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n // eslint-disable-next-line\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imgUrl = getImageUrl(this.parent, items[i]);\n setValue('_fm_imageUrl', imgUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem) {\n this.clearSelect();\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n }\n };\n LargeIconsView.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'largeiconsview') {\n this.doOpenAction(args.target);\n }\n };\n LargeIconsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'LargeIcons' && this.element) {\n this.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n LargeIconsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.startItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n var eveArgs = { ctrlKey: true, shiftKey: true };\n this.doSelection(lastItem, eveArgs);\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.clearSelection();\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n LargeIconsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onSearch = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n this.parent.searchedItems = args.files;\n this.onLayoutChange(args);\n }\n };\n LargeIconsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.adjustHeight();\n };\n LargeIconsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.updateSelectedData();\n };\n LargeIconsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'LargeIcons' && !isNOU(this.listObj) &&\n this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered\n && this.parent.sortBy === 'filterPath') {\n this.parent.sortBy = 'name';\n this.parent.notify(events.sortByChange, {});\n }\n };\n LargeIconsView.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.search, this.onSearch);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.splitterResize, this.splitterResizeHandler);\n this.parent.off(events.resizeEnd, this.resizeHandler);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n this.parent.off(events.filterEnd, this.onPathChanged);\n };\n LargeIconsView.prototype.addEventListener = function () {\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.search, this.onSearch, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.splitterResize, this.splitterResizeHandler, this);\n this.parent.on(events.resizeEnd, this.resizeHandler, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n };\n LargeIconsView.prototype.onActionFailure = function () { this.isInteraction = true; this.isInteracted = true; };\n // eslint-disable-next-line\n LargeIconsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var ele = closest(args.target, 'li');\n this.parent.itemData = [this.getItemObject(ele)];\n }\n };\n LargeIconsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.updateSelectedData();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n LargeIconsView.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath === '') ? [getPathObject(this.parent)] :\n [this.getItemObject(select('.e-active', this.element))];\n }\n };\n LargeIconsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeRecords = [];\n this.parent.activeElements = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.activeElements.push(activeEle[i]);\n this.parent.activeRecords.push(this.getItemObject(activeEle[i]));\n }\n }\n };\n LargeIconsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {\n this.onPathChanged(args);\n }\n }\n };\n LargeIconsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n LargeIconsView.prototype.onPropertyChanged = function (e) {\n var currentSelected;\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'selectedItems':\n this.isInteraction = false;\n this.isInteracted = false;\n currentSelected = isNOU(this.parent.selectedItems) ? [] : this.parent.selectedItems.slice(0);\n currentSelected = this.parent.allowMultiSelection ? currentSelected :\n currentSelected.slice(currentSelected.length - 1);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onClearAllInit();\n if (currentSelected.length) {\n this.selectItems(currentSelected);\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n this.isInteraction = true;\n this.isInteracted = true;\n break;\n case 'showThumbnail':\n refresh(this.parent);\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n eve.originalEvent.preventDefault();\n if (proxy_1.parent.isDevice) {\n proxy_1.tapCount = eve.tapCount;\n proxy_1.tapEvent = eve;\n setTimeout(function () {\n if (proxy_1.tapCount > 0) {\n proxy_1.doTapAction(proxy_1.tapEvent);\n }\n proxy_1.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n proxy_1.dblClickHandler(eve);\n }\n else {\n proxy_1.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n proxy_1.multiSelect = proxy_1.parent.allowMultiSelection ? true : false;\n if (proxy_1.parent.allowMultiSelection) {\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n proxy_1.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if (e.which === 3 && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (e.ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (e.ctrlKey && e.shiftKey) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !e.ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey) {\n if (!(e && e.ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n // eslint-disable-next-line\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var text = getValue('name', details_1);\n if (!_this.parent.isFile) {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imgUrl);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n // eslint-disable-next-line\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n // eslint-disable-next-line\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n LargeIconsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.FOCUS, this.element);\n };\n LargeIconsView.prototype.getActiveItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n };\n LargeIconsView.prototype.getFirstItem = function () {\n return this.itemList[0];\n };\n LargeIconsView.prototype.getLastItem = function () {\n return this.itemList[this.itemList.length - 1];\n };\n LargeIconsView.prototype.navigateItem = function (item) {\n this.setFocus(item);\n };\n LargeIconsView.prototype.navigateDown = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards, this.perRow);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.navigateRight = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.getNextItem = function (li, isTowards, perRow) {\n if (isNOU(li)) {\n return this.getFocusedItem() || this.getActiveItem() || this.getFirstItem();\n }\n var index = this.itemList.indexOf(li);\n var nextItem;\n do {\n if (isTowards) {\n index = perRow ? index + perRow : index + 1;\n }\n else {\n index = perRow ? index - perRow : index - 1;\n }\n nextItem = this.itemList[index];\n if (this.parent.enableVirtualization && isNOU(nextItem)) {\n var marginValue = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-bottom'), 10);\n var scrollHeight = this.itemList[0].getBoundingClientRect().height + marginValue;\n this.element.firstElementChild.scrollTo(this.element.firstElementChild.scrollTop, this.element.firstElementChild.scrollTop + scrollHeight);\n }\n if (isNOU(nextItem)) {\n return li;\n }\n } while (!isVisible(nextItem));\n return nextItem;\n };\n LargeIconsView.prototype.setFocus = function (nextItem) {\n if (!isNOU(nextItem)) {\n var fileSelectionArgs = this.triggerSelection('select', nextItem);\n if (fileSelectionArgs.cancel !== true) {\n this.startItem = nextItem;\n this.clearSelect();\n this.addActive(nextItem);\n this.addFocus(nextItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', nextItem);\n }\n }\n };\n LargeIconsView.prototype.spaceKey = function (fItem) {\n if (!isNOU(fItem) && !fItem.classList.contains(CLS.ACTIVE)) {\n var fileSelectionArgs = this.triggerSelection('select', fItem);\n if (fileSelectionArgs.cancel !== true) {\n this.addActive(fItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', fItem);\n }\n }\n };\n LargeIconsView.prototype.ctrlAKey = function (firstItem, lastItem) {\n if (this.parent.allowMultiSelection && !isNOU(firstItem)) {\n this.startItem = firstItem;\n var eveArgs = { ctrlKey: true, shiftKey: true };\n var liParent = this.element.querySelector('.' + CLS.LIST_PARENT);\n var liScrPos = liParent.scrollTop;\n var getCurFocusedItem = this.getFocusedItem();\n this.doSelection(lastItem, eveArgs);\n liParent.scrollTop = liScrPos;\n if (!isNOU(getCurFocusedItem)) {\n this.addFocus(getCurFocusedItem);\n }\n }\n };\n LargeIconsView.prototype.csEndKey = function (lastItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(lastItem);\n }\n else if (!isNOU(lastItem)) {\n if (e.action === 'ctrlEnd') {\n this.addFocus(lastItem);\n }\n else {\n this.doSelection(lastItem, e);\n }\n }\n };\n LargeIconsView.prototype.csHomeKey = function (firstItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(firstItem);\n }\n else if (!isNOU(firstItem)) {\n if (e.action === 'ctrlHome') {\n this.addFocus(firstItem);\n }\n else {\n this.doSelection(firstItem, e);\n }\n }\n };\n LargeIconsView.prototype.csDownKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, true);\n }\n else {\n var dItem = this.getNextItem(fItem, true, this.perRow);\n if (!isNOU(dItem)) {\n if (e.action === 'ctrlDown') {\n this.addFocus(dItem);\n }\n else {\n this.doSelection(dItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csLeftKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, false);\n }\n else {\n var lItem = this.getNextItem(fItem, false);\n if (!isNOU(lItem)) {\n if (e.action === 'ctrlLeft') {\n this.addFocus(lItem);\n }\n else {\n this.doSelection(lItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csRightKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, true);\n }\n else {\n var rItem = this.getNextItem(fItem, true);\n if (!isNOU(rItem)) {\n if (e.action === 'ctrlRight') {\n this.addFocus(rItem);\n }\n else {\n this.doSelection(rItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csUpKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, false);\n }\n else {\n var uItem = this.getNextItem(fItem, false, this.perRow);\n if (!isNOU(uItem)) {\n if (e.action === 'ctrlUp') {\n this.addFocus(uItem);\n }\n else {\n this.doSelection(uItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.addActive = function (nextItem) {\n if (!isNOU(nextItem)) {\n if (!nextItem.classList.contains(CLS.ACTIVE)) {\n this.parent.selectedItems.push(this.getDataName(nextItem));\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n addClass([nextItem], [CLS.ACTIVE]);\n nextItem.setAttribute('aria-selected', 'true');\n this.checkState(nextItem, true);\n }\n this.parent.visitedItem = nextItem;\n }\n };\n LargeIconsView.prototype.removeActive = function (preItem) {\n if (!isNOU(preItem)) {\n removeClass([preItem], [CLS.ACTIVE]);\n if (this.parent.allowMultiSelection) {\n preItem.setAttribute('aria-selected', 'false');\n }\n else {\n preItem.removeAttribute('aria-selected');\n }\n this.checkState(preItem, false);\n var index = this.parent.selectedItems.indexOf(this.getDataName(preItem));\n if (index > -1) {\n this.parent.selectedItems.splice(index, 1);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n this.parent.visitedItem = null;\n }\n };\n LargeIconsView.prototype.getDataName = function (item) {\n // eslint-disable-next-line\n var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n if (!isNOU(this.listObj)) {\n this.adjustHeight();\n }\n };\n LargeIconsView.prototype.splitterResizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.getItemCount = function () {\n var perRow = 1;\n if (this.itemList) {\n for (var i = 0, len = this.itemList.length - 1; i < len; i++) {\n if (this.itemList[i].getBoundingClientRect().top === this.itemList[i + 1].getBoundingClientRect().top) {\n perRow++;\n }\n else {\n break;\n }\n }\n }\n this.perRow = perRow;\n };\n LargeIconsView.prototype.triggerSelection = function (action, item) {\n // eslint-disable-next-line\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = {\n action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n // eslint-disable-next-line\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var newData = new DataManager(this.items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (newData.length > 0) {\n resultData = new DataManager(newData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n var index = this.items.indexOf(resultData[0]);\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[index], eveArgs);\n }\n };\n LargeIconsView.prototype.updateSelectedData = function () {\n // eslint-disable-next-line\n var data = [];\n var items = selectAll('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n for (var i = 0; i < items.length; i++) {\n data[i] = this.getItemObject(items[i]);\n }\n this.parent.itemData = data;\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.onMethodCall = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n var action = getValue('action', args);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', args));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', args));\n break;\n case 'openFile':\n this.openFile(getValue('id', args));\n break;\n case 'renameFile':\n this.isInteraction = false;\n this.isInteracted = false;\n this.renameFile(getValue('id', args), getValue('newName', args));\n break;\n case 'createFolder':\n this.isInteraction = false;\n this.isInteracted = false;\n break;\n case 'clearSelection':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onClearAllInit();\n break;\n case 'selectAll':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onSelectAllInit();\n break;\n }\n };\n LargeIconsView.prototype.getItemsIndex = function (items) {\n var indexes = [];\n var isFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filterName = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !isFilter) {\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filterName, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n }\n else {\n for (var i = 0, len = this.items.length; i < len; i++) {\n var name_2 = getValue('filterPath', this.items[i]) + getValue('name', this.items[i]);\n if ((items.indexOf(name_2) !== -1) || (items.indexOf(getValue(filterName, this.items[i])) !== -1)) {\n indexes.push(i);\n }\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var indexes = this.getItemsIndex(ids);\n if (indexes.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < indexes.length; i++) {\n data[i] = this.items[indexes[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var index = this.getItemsIndex(ids);\n if (index.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < index.length; i++) {\n data[i] = this.items[index[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n this.doOpenAction(this.itemList[indexes[0]]);\n }\n };\n LargeIconsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n updateRenamingData(this.parent, this.items[indexes[0]]);\n if (isNOU(name)) {\n doRename(this.parent);\n }\n else {\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n rename(this.parent, this.parent.path, name);\n }\n }\n }\n };\n return LargeIconsView;\n}());\nexport { LargeIconsView };\n","import { EventHandler, closest, isNullOrUndefined, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, addClass, removeClass, remove, createElement } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { read } from '../common/operations';\nimport { getLocaleText, searchWordHandler } from '../common/utility';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * BreadCrumbBar module\n */\nvar BreadCrumbBar = /** @class */ (function () {\n /**\n * constructor for addressbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies parent element.\n * @private\n *\n */\n function BreadCrumbBar(parent) {\n this.addressPath = '';\n this.addressBarLink = '';\n this.searchTimer = null;\n this.searchWrapWidth = null;\n this.parent = parent;\n this.keyConfigs = {\n enter: 'enter'\n };\n this.render();\n }\n BreadCrumbBar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var value = e.newProp.searchSettings;\n switch (prop) {\n case 'searchSettings':\n if (!isNullOrUndefined(value.allowSearchOnTyping)) {\n this.searchEventBind(value.allowSearchOnTyping);\n }\n if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&\n !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&\n isNullOrUndefined(value.ignoreCase))) {\n searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);\n }\n break;\n }\n }\n };\n BreadCrumbBar.prototype.render = function () {\n this.addEventListener();\n };\n BreadCrumbBar.prototype.onPathChange = function () {\n var pathNames = this.parent.pathNames;\n var paths = this.parent.path.split('/');\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var addressbarLI = null;\n var pathNamesLen = pathNames.length;\n if (pathNames.length > 0) {\n var id = '';\n for (var i = 0; i < pathNamesLen; i++) {\n var addressATag = null;\n addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });\n for (var j = 0; j <= i; j++) {\n id = id + paths[j] + '/';\n }\n addressbarLI.setAttribute('data-utext', id);\n if (i !== 0) {\n var icon = createElement('span', { className: CLS.ICONS });\n addressbarLI.appendChild(icon);\n }\n if (pathNamesLen - i !== 1) {\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressbarLI.setAttribute('tabindex', '0');\n }\n else {\n addressATag = createElement('span', { className: CLS.LIST_TEXT });\n }\n id = '';\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n // eslint-disable-next-line\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n // eslint-disable-next-line\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n // eslint-disable-next-line\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n // eslint-disable-next-line\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n };\n ContextMenu.prototype.onBeforeClose = function () {\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule == 'navigationpane') {\n this.parent.pathId.pop();\n var parentKey = [];\n var itemKeys = Object.keys(this.parent.feParent);\n for (var _i = 0, itemKeys_1 = itemKeys; _i < itemKeys_1.length; _i++) {\n var item = itemKeys_1[_i];\n var itemData = getValue(item, this.parent.feParent);\n if (this.parent.pathNames.indexOf(itemData.name) !== -1) {\n parentKey.push(itemData._fm_id);\n }\n }\n this.parent.pathId.push(parentKey[parentKey.length - 1]);\n this.parent.navigationpaneModule.treeObj.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n this.disabledItems = [];\n var selected = false;\n var uid;\n // eslint-disable-next-line\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest(\"div\");\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n // eslint:disable-next-line\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n // eslint:disable-next-line\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n // eslint:disable-next-line\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n // eslint-disable-next-line\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n // eslint-disable-next-line\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('data-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n /* istanbul ignore next */\n // eslint:disable-next-line\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n this.disabledItems.push('Paste');\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.parent.navigationpaneModule.treeObj.selectedNodes[0] + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n }\n else if (this.parent.selectedItems.length !== 1 && this.parent.activeModule !== 'navigationpane') {\n this.disabledItems.push('Rename', 'Paste');\n }\n };\n ContextMenu.prototype.setFileItem = function () {\n this.menuType = 'file';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.file.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (this.parent.selectedItems.length !== 1) {\n this.disabledItems.push('Rename');\n }\n };\n ContextMenu.prototype.setLayoutItem = function (target) {\n this.menuType = 'layout';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.layout.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (!this.parent.allowMultiSelection || ((this.parent.view === 'LargeIcons' &&\n (closest(target, '#' + this.parent.element.id + CLS.LARGEICON_ID).getElementsByClassName(CLS.EMPTY).length !== 0))\n || (this.parent.view === 'Details' &&\n (closest(target, '#' + this.parent.element.id + CLS.GRID_ID).getElementsByClassName(CLS.EMPTY).length !== 0)))) {\n this.disabledItems.push('SelectAll');\n }\n if (this.parent.selectedNodes.length === 0) {\n this.disabledItems.push('Paste');\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n else {\n return -1;\n }\n };\n // eslint-disable-next-line\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n // eslint-disable-next-line\n var args = { target: this.menuTarget };\n this.parent.notify(events.menuItemData, args);\n return this.parent.itemData[0];\n }\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onSelect = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var itemText = args.item.id.substr((this.parent.element.id + '_cm_').length);\n // eslint-disable-next-line\n var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n _this.isMenuItemClicked = true;\n // eslint:disable-next-line\n switch (itemText) {\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'paste':\n if (_this.menuType === 'folder') {\n if ((_this.parent.activeModule === 'largeiconsview') || (_this.parent.activeModule === 'detailsview')) {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n else {\n _this.parent.folderPath = '';\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n /* istanbul ignore next */\n case 'name':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'size':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'date':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'ascending':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\n// eslint-disable-next-line\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n // eslint-disable-next-line\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n // eslint-disable-next-line\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n // eslint-disable-next-line\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n // eslint-disable-next-line\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n // eslint-disable-next-line\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not \n _this.isMac = false;\n FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);\n return _this;\n }\n FileManager_1 = FileManager;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n FileManager.prototype.getModuleName = function () {\n return 'filemanager';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n FileManager.prototype.preRender = function () {\n if (isNOU(this.element.id) || this.element.id === '') {\n this.element.setAttribute('id', getUniqueID('filemanager'));\n }\n this.ensurePath();\n this.feParent = [];\n this.feFiles = [];\n setAttr(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.isDevice = Browser.isDevice;\n this.isMobile = this.checkMobile();\n if (this.isMobile) {\n this.setProperties({ navigationPaneSettings: { visible: false } }, true);\n }\n var ele = closest(this.element, '.e-bigger');\n this.isBigger = ele ? true : false;\n this.activeModule = (this.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n createSpinner({ target: this.element }, createElement);\n this.addWrapper();\n this.keyConfigs = {\n altN: 'alt+n',\n f5: 'f5',\n ctrlShift1: 'ctrl+shift+1',\n ctrlShift2: 'ctrl+shift+2',\n ctrlU: 'ctrl+u'\n };\n this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale);\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string} - returns the persisted data.\n * @hidden\n */\n FileManager.prototype.getPersistData = function () {\n var keyEntity = ['view', 'path', 'selectedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n FileManager.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'breadcrumbbar',\n args: [this]\n });\n modules.push({\n member: 'largeiconsview',\n args: [this]\n });\n if (this.toolbarSettings.visible) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this]\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this]\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n FileManager.prototype.render = function () {\n this.initialize();\n var slItems = isNOU(this.selectedItems) ? [] :\n this.allowMultiSelection ? this.selectedItems : this.selectedItems.slice(this.selectedItems.length - 1);\n this.setProperties({ selectedItems: slItems }, true);\n this.fileView = this.view;\n this.isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n this.setRtl(this.enableRtl);\n this.addEventListeners();\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n this.adjustHeight();\n if (isNOU(this.navigationpaneModule)) {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n this.wireEvents();\n this.renderComplete();\n };\n FileManager.prototype.ensurePath = function () {\n var currentPath = this.path;\n if (isNOU(currentPath)) {\n currentPath = '/';\n }\n if (currentPath.lastIndexOf('/') !== (currentPath.length - 1)) {\n currentPath = currentPath + '/';\n }\n this.originalPath = currentPath;\n var paths = currentPath.split('/');\n this.setProperties({ path: paths[0] + '/' }, true);\n this.pathNames = [];\n this.pathId = ['fe_tree'];\n this.itemData = [];\n };\n FileManager.prototype.initialize = function () {\n if (this.isMobile) {\n addClass([this.element], CLS.MOBILE);\n }\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n this.addCssClass(null, this.cssClass);\n this.renderFileUpload();\n };\n FileManager.prototype.addWrapper = function () {\n var headerWrap = this.createElement('div', { id: this.element.id + CLS.TOOLBAR_ID });\n this.element.appendChild(headerWrap);\n var layoutWrap = this.createElement('div', {\n id: this.element.id + CLS.LAYOUT_ID, className: CLS.LAYOUT\n });\n this.element.appendChild(layoutWrap);\n var navigationWrap = this.createElement('div', {\n id: this.element.id + CLS.NAVIGATION_ID, className: CLS.NAVIGATION\n });\n var treeWrap = this.createElement('div', {\n id: this.element.id + CLS.TREE_ID\n });\n navigationWrap.appendChild(treeWrap);\n var contentWrap = this.createElement('div', {\n id: this.element.id + CLS.CONTENT_ID, className: CLS.LAYOUT_CONTENT\n });\n this.breadCrumbBarNavigation = this.createElement('div', {\n id: this.element.id + CLS.BREADCRUMBBAR_ID,\n className: CLS.BREADCRUMBS\n });\n contentWrap.appendChild(this.breadCrumbBarNavigation);\n var gridWrap = this.createElement('div', {\n id: this.element.id + CLS.GRID_ID\n });\n contentWrap.appendChild(gridWrap);\n var largeiconWrap = this.createElement('div', {\n id: this.element.id + CLS.LARGEICON_ID,\n className: CLS.LARGE_ICONS, attrs: { 'role': 'group' }\n });\n contentWrap.appendChild(largeiconWrap);\n var overlay = this.createElement('span', { className: CLS.OVERLAY });\n contentWrap.appendChild(overlay);\n var paneSettings;\n if (!this.enableRtl) {\n layoutWrap.appendChild(navigationWrap);\n layoutWrap.appendChild(contentWrap);\n paneSettings = [\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n },\n { size: '75%', min: '270px' }\n ];\n }\n else {\n layoutWrap.appendChild(contentWrap);\n layoutWrap.appendChild(navigationWrap);\n paneSettings = [\n { size: '75%', min: '270px' },\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n }\n ];\n }\n this.splitterObj = new Splitter({\n paneSettings: paneSettings,\n width: '100%',\n enableRtl: false,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n resizing: this.splitterResize.bind(this)\n });\n this.splitterObj.isStringTemplate = true;\n this.splitterObj.appendTo(layoutWrap);\n var dialogWrap = this.createElement('div', { id: this.element.id + CLS.DIALOG_ID });\n this.element.appendChild(dialogWrap);\n var menuWrap = this.createElement('ul', { id: this.element.id + CLS.CONTEXT_MENU_ID });\n this.element.appendChild(menuWrap);\n var dialogImgWrap = this.createElement('div', { id: this.element.id + CLS.IMG_DIALOG_ID });\n this.element.appendChild(dialogImgWrap);\n var extnDialogWrap = this.createElement('div', { id: this.element.id + CLS.EXTN_DIALOG_ID });\n this.element.appendChild(extnDialogWrap);\n var uploadDialogWrap = this.createElement('div', { id: this.element.id + CLS.UPLOAD_DIALOG_ID });\n this.element.appendChild(uploadDialogWrap);\n };\n FileManager.prototype.adjustHeight = function () {\n var toolbar = select('#' + this.element.id + CLS.TOOLBAR_ID, this.element);\n var toolBarHeight = toolbar ? toolbar.offsetHeight : 0;\n if (this.splitterObj) {\n this.splitterObj.height = (this.element.clientHeight - toolBarHeight).toString();\n this.splitterObj.dataBind();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.splitterResize = function () {\n this.notify(events.splitterResize, {});\n };\n FileManager.prototype.splitterAdjust = function () {\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n if (this.navigationPaneSettings.visible) {\n this.splitterObj.expand(this.enableRtl ? 1 : 0);\n bar.classList.remove(CLS.DISPLAY_NONE);\n }\n else {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n };\n FileManager.prototype.addCssClass = function (oldOne, newOne) {\n if (!isNOU(oldOne) && oldOne !== '') {\n removeClass([this.element], oldOne.split(' '));\n }\n if (!isNOU(newOne) && newOne !== '') {\n addClass([this.element], newOne.split(' '));\n }\n };\n FileManager.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n FileManager.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n FileManager.prototype.onContextMenu = function (e) {\n e.preventDefault();\n };\n FileManager.prototype.checkMobile = function () {\n return (/iphone|ipod|android|blackberry|opera|mini|windows\\sce|palm|smartphone|iemobile/i.test(Browser.userAgent.toLowerCase())\n && /mobile/i.test(Browser.userAgent.toLowerCase()));\n };\n FileManager.prototype.renderFileUpload = function () {\n var id = this.element.id + CLS.UPLOAD_ID;\n var uploadEle = this.createElement('input', { id: id, attrs: { name: 'uploadFiles', type: 'file' } });\n this.element.appendChild(uploadEle);\n this.uploadDialogObj = new Dialog({\n header: getLocaleText(this, 'Header-Upload'),\n content: uploadEle,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: false,\n isModal: true,\n width: '350px',\n target: this.popupTarget ? this.popupTarget : '#' + this.element.id,\n cssClass: getCssClass(this, this.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: this.locale,\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n enableRtl: this.enableRtl,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n open: this.onOpen.bind(this),\n close: this.onClose.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n this.uploadDialogObj.appendTo('#' + this.element.id + CLS.UPLOAD_DIALOG_ID);\n this.renderUploadBox();\n };\n FileManager.prototype.renderUploadBox = function () {\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n this.uploadObj = new Uploader({\n dropArea: select('#' + this.element.id + CLS.CONTENT_ID, this.element),\n asyncSettings: {\n saveUrl: uploadUrl,\n removeUrl: uploadUrl\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n removing: this.onRemoving.bind(this),\n canceling: this.onCancel.bind(this),\n clearing: this.onClearing.bind(this),\n selected: this.onSelected.bind(this),\n success: this.onUploadSuccess.bind(this),\n failure: this.onUploadFailure.bind(this),\n autoUpload: this.uploadSettings.autoUpload,\n minFileSize: this.uploadSettings.minFileSize,\n maxFileSize: this.uploadSettings.maxFileSize,\n allowedExtensions: this.uploadSettings.allowedExtensions,\n directoryUpload: this.uploadSettings.directoryUpload,\n fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n // eslint-disable-next-line\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n // eslint-disable-next-line\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n // eslint-disable-next-line\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n // eslint-disable-next-line\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n FileManager.prototype.onUploadSuccess = function (files) {\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n FileManager.prototype.onUploadFailure = function (files) {\n // eslint-disable-next-line\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') != -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n FileManager.prototype.unWireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeHandler);\n this.keyboardModule.destroy();\n };\n FileManager.prototype.setPath = function () {\n this.setProperties({ selectedItems: [] }, true);\n this.ensurePath();\n this.notify(events.clearPathInit, { selectedNode: this.pathId[0] });\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {FileManager} newProp\n * @param {FileManager} oldProp\n * @returns void\n * @private\n */\n /* istanbul ignore next */\n // eslint:disable-next-line\n FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var height;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'ajaxSettings':\n this.ajaxSettingSetModel(newProp);\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'allowMultiSelection':\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n else {\n if (this.selectedItems.length > 1) {\n this.setProperties({ selectedItems: this.selectedItems.slice(this.selectedItems.length - 1) }, true);\n }\n removeClass([this.element], CLS.CHECK_SELECT);\n }\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'cssClass':\n this.addCssClass(oldProp.cssClass, newProp.cssClass);\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'detailsViewSettings':\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableRtl':\n this.enableRtl = newProp.enableRtl;\n this.refresh();\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n this.refresh();\n break;\n case 'height':\n height = !isNOU(newProp.height) ? formatUnit(newProp.height) : newProp.height;\n setAttr(this.element, { 'height': height });\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'locale':\n if (!isNOU(newProp.enableRtl)) {\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n }\n this.localeSetModelOption(newProp);\n break;\n case 'navigationPaneSettings':\n this.splitterAdjust();\n this.notify(events.modelChanged, { module: 'navigationpane', newProp: newProp, oldProp: oldProp });\n break;\n case 'path':\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n refresh(this);\n this.notify(events.sortByChange, {});\n if (this.view === 'Details') {\n this.notify(events.sortColumn, {});\n }\n break;\n case 'popupTarget':\n if (this.uploadDialogObj) {\n this.uploadDialogObj.target = newProp.popupTarget;\n }\n if (this.dialogObj) {\n this.dialogObj.target = newProp.popupTarget;\n }\n if (this.extDialogObj) {\n this.extDialogObj.target = newProp.popupTarget;\n }\n if (this.viewerObj) {\n this.viewerObj.target = newProp.popupTarget;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n // eslint-disable-next-line\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n // eslint-disable-next-line\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n // eslint-disable-next-line\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: largeIconSpan + getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: gridSpan + getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>'\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = __assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n if (this.itemList.length !== 0 && this.largeIconInstance.element.querySelector('.' + CLS.EMPTY)) {\n this.largeIconInstance.element.removeChild(this.largeIconInstance.element.querySelector('.' + CLS.EMPTY));\n }\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add(\"e-virtual-top\");\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add(\"e-virtual-bottom\");\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n * @param dataSourceLength The length of the data source.\n * @returns The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount = Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) / (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount * (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n * @param destroy - Set `true` to unwire the scroll event.\n */\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n // Wire the scroll event\n EventHandler.add(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll, this);\n }\n else {\n // Unwire the scroll event\n EventHandler.remove(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll);\n }\n };\n /**\n * Handles the scroll event for the list element.\n * This method updates the top and bottom elements and the displayed items based on the scroll position.\n */\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n // Set the starting height to 0\n var startingHeight = 0;\n // Get the current scroll position\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n // Calculate the height of the top element\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n // Calculate the height of the bottom element\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n // If the scroll position is less than or equal to the total height, set the top and bottom element heights.\n // Otherwise, set the top element height to the total height and the bottom element height to 0.\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n // If the top element height has changed, update the top and bottom element heights and re-render the items.\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n // Check whether the scroll direction is upward or downward\n if (scroll > this.scrollPosition) {\n // Scrolling is upward\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n this.onNormalScroll(listDiff, true);\n }\n else {\n // Scrolling is downward\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n this.onNormalScroll(listDiff, false);\n }\n }\n // Update the list difference and scroll position variables\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n this.scrollPosition = scroll;\n // Update the list of items and the items property of the largeIconInstance\n this.largeIconInstance.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.largeIconInstance.element));\n this.largeIconInstance.items = this.largeIconInstance.allItems.slice(this.renderedCount -\n this.itemCount, this.renderedCount);\n };\n /**\n * Calculates the current scroll position of the list element.\n * @param startingHeight The starting height from which to calculate the scroll position.\n * @returns The current scroll position.\n */\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n // If the scroll position is less than or equal to the starting height, return 0.\n // Otherwise, return the scroll position minus the starting height.\n return ((this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight) <= 0) ? 0 :\n (this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight);\n };\n /**\n * This method updates the displayed items and the selection based on the scroll direction.\n * @param listDiff The number of rows to update.\n * @param isScrollingDown If set to true, the scroll direction is downward.\n */\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n // Update the displayed items\n for (var i = 0; i < listDiff; i++) {\n this.updateUI(isScrollingDown);\n }\n };\n /**\n * Updates the items in the large icons view.\n * @param isScrollingDown If set to true, the scroll direction is downward.\n */\n Virtualization.prototype.updateUI = function (isScrollingDown) {\n var _this = this;\n if (isScrollingDown) {\n // Get the next batch of items to be displayed\n this.items = this.largeIconInstance.allItems.slice(this.renderedCount, this.renderedCount + this.rowItemCount);\n // If there are items to be displayed, create list elements for them and append them to the list\n if (this.items.length > 0) {\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n this.itemList.forEach(function (liEle) {\n _this.largeIconInstance.element.firstElementChild.insertBefore(liEle, _this.bottomElement);\n });\n // Update the rendered count variable\n this.renderedCount = (this.largeIconInstance.allItems.length >= this.renderedCount + this.rowItemCount) ?\n this.renderedCount + this.rowItemCount : this.renderedCount + this.lastRowCount;\n // Remove the first batch of items from the list\n for (var i = 0; i < this.rowItemCount; i++) {\n detach(this.topElement.nextElementSibling);\n }\n }\n }\n else {\n // Scrolling up\n var lastItemIndex = void 0;\n var isAllRendered = void 0;\n if (this.renderedCount === this.largeIconInstance.allItems.length) {\n // Set lastItemIndex to the last item in the last row\n lastItemIndex = this.renderedCount - (this.itemCount - this.rowItemCount + this.lastRowCount);\n // Set renderedCount to the total number of items that have been rendered, except for the items in the last row\n this.renderedCount = ((this.renderedCount - this.lastRowCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.lastRowCount);\n // Set isAllRendered to true to indicate that all items have been rendered\n isAllRendered = true;\n }\n else {\n // Set lastItemIndex to the last item in the current row\n lastItemIndex = this.renderedCount - this.itemCount;\n // Set renderedCount to the total number of items that have been rendered, except for the items in the current row\n this.renderedCount = ((this.renderedCount - this.rowItemCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.rowItemCount);\n }\n // Set startItemIndex to the first item in the current or previous row\n var startItemIndex = (lastItemIndex - this.rowItemCount > 0) ? lastItemIndex - this.rowItemCount : 0;\n // Set the items array to the items in the current or previous row\n this.items = this.largeIconInstance.allItems.slice(startItemIndex, lastItemIndex);\n if (this.items.length > 0) {\n // Create a list of elements from the items array\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n // Set the itemList array to the list items in the list elements\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Add the items to the beginning of the list\n for (var len = this.itemList.length; len > 0; len--) {\n this.largeIconInstance.element.firstElementChild.insertBefore(this.itemList[len - 1], this.topElement.nextElementSibling);\n }\n // Remove the last row of items from the list\n for (var i = 0; i < ((isAllRendered) ? this.lastRowCount : this.rowItemCount); i++) {\n detach(this.bottomElement.previousElementSibling);\n }\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n /**\n * Destroys the component.\n */\n Virtualization.prototype.destroy = function () {\n // If the file manager has already been destroyed, return immediately\n if (this.filemanagerInstance.isDestroyed) {\n return;\n }\n // If the large icon element has a child element, unwire the scroll event\n if (!isNullOrUndefined(this.largeIconInstance.element.firstElementChild)) {\n this.wireScrollEvent(true);\n }\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { createDialog } from '../pop-up/dialog';\nimport { updatePath, getPath, getDirectories } from '../common/utility';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getDirectoryPath, getModule, getPathId } from '../common/index';\nimport { copyFiles, cutFiles, removeActive, pasteHandler, getParentPath, readDropPath } from '../common/index';\nimport { hasEditAccess, createDeniedDialog, hasDownloadAccess, getAccessClass } from '../common/index';\n/**\n * NavigationPane module\n */\nvar NavigationPane = /** @class */ (function () {\n /**\n * Constructor for the TreeView module\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n /* istanbul ignore next */\n function NavigationPane(parent) {\n this.removeNodes = [];\n this.moveNames = [];\n this.expandTree = false;\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n // eslint-disable-next-line\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n // eslint-disable-next-line\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n // eslint-disable-next-line\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n // eslint-disable-next-line\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n // eslint-disable-next-line\n var directories = getDirectories(files);\n if (directories.length > 0 &&\n (directories[0].filterPath == null || this.getTreeData(target)[0].filterPath == null || directories[0].filterPath !== this.getTreeData(target)[0].filterPath)) {\n var length_1 = 0;\n // eslint-disable-next-line\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line\n folders[length_1]._fm_icon = 'e-fe-folder';\n // eslint-disable-next-line\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n // eslint-disable-next-line\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n // eslint-disable-next-line\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.selectedNodes = [args.node.getAttribute(\"data-uid\")];\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n // eslint-disable-next-line\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.selectedNodes = [node.getAttribute('data-uid')];\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\n // eslint-disable-next-line\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.selectedItems = [];\n this.parent.itemData = nodeData;\n var previousPath = this.parent.path;\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n if (!this.isRightClick && this.isSameNodeClicked) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.isNodeClickCalled = true;\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n NavigationPane.prototype.onPathDrag = function (args) {\n this.isPathDragged = true;\n this.selectResultNode(args[0]);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpand = function (args) {\n if (!args.isInteracted && !this.isDrag) {\n return;\n }\n if (args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n var text = getValue('text', args.nodeData);\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? text : id;\n var path = getPath(args.node, newText, isId);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n this.isNodeExpandCalled = true;\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n // eslint-disable-next-line\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], !this.expandTree);\n }\n this.expandNodeTarget = '';\n }\n this.expandTree = false;\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.selectedNodes = [sleId];\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.addChild(args.files, id, false);\n this.treeObj.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.expandTree = this.treeObj.expandedNodes.indexOf(this.treeObj.selectedNodes[0]) !== -1;\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEnd = function (args) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.updateTree(args);\n }\n else {\n // eslint-disable-next-line\n var data = this.treeObj.getTreeData();\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(data).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(data).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.currentItemText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n this.renameParent = getValue(this.treeObj.fields.parentID, resultData[0]);\n this.parent.expandedId = this.renameParent;\n this.parent.itemData = this.getTreeData(this.renameParent);\n read(this.parent, events.renameEndParent, this.parent.filterPath.replace(/\\\\/g, '/'));\n }\n }\n };\n NavigationPane.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.addDragDrop();\n break;\n case 'navigationPaneSettings':\n read(this.parent, events.finalizeEnd, '/');\n if (e.oldProp.navigationPaneSettings.sortOrder !== e.newProp.navigationPaneSettings.sortOrder) {\n this.treeObj.sortOrder = e.newProp.navigationPaneSettings.sortOrder;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDownLoadInit = function () {\n this.doDownload();\n };\n NavigationPane.prototype.onSelectionChanged = function (e) {\n this.treeObj.selectedNodes = [e.selectedNode];\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n // eslint-disable-next-line\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n // eslint-disable-next-line\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n // eslint-disable-next-line\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n // eslint-disable-next-line\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (this.parent.hasId) {\n this.parent.isDropEnd = !this.parent.isPasteError;\n readDropPath(this.parent);\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n // eslint-disable-next-line\n var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n // eslint-disable-next-line\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n // eslint-disable-next-line\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n // eslint-disable-next-line\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n // eslint-disable-next-line\n NavigationPane.prototype.getTreeData = function (args) {\n // eslint-disable-next-line\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n // eslint-disable-next-line\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\nimport { removeBlur, openAction, getImageUrl, fileType, getSortedData, getLocaleText, updateLayout } from '../common/utility';\nimport { createEmptyElement } from '../common/utility';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { cutFiles, addBlur, openSearchFolder, copyFiles, removeActive, pasteHandler, getPathObject, getName } from '../common/index';\nimport { hasReadAccess, hasEditAccess, hasDownloadAccess, doRename, getAccessClass, createDeniedDialog, rename } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule, getFullPath } from '../common/index';\nimport { getDirectoryPath, updateRenamingData, getItemName, doDeleteFiles, doDownloadFiles } from '../common/index';\n/**\n * DetailsView module\n */\nvar DetailsView = /** @class */ (function () {\n /**\n * Constructor for the GridView module\n *\n * @param {FileManager} parent - specifies the parent.\n * @hidden\n */\n function DetailsView(parent) {\n this.isInteracted = true;\n this.interaction = true;\n this.isPasteOperation = false;\n this.isColumnRefresh = false;\n this.dragObj = null;\n this.startIndex = null;\n this.firstItemIndex = null;\n this.isSelectionUpdate = false;\n this.currentSelectedItem = [];\n this.count = 0;\n this.isRendered = true;\n this.isLoaded = false;\n this.isNameWidth = false;\n this.pasteOperation = false;\n this.uploadOperation = false;\n /* istanbul ignore next */\n // eslint:disable-next-line\n this.actionDivert = false;\n Grid.Inject(Resize, ContextMenu, Sort, VirtualScroll);\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.GRID_ID, this.parent.element);\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n tab: 'tab',\n moveDown: 'downarrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n ctrlUp: 'ctrl+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n end: 'end',\n home: 'home',\n moveUp: 'uparrow',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n if (this.parent.isMobile) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick',\n persistSelection: (this.parent.enableVirtualization) ? true : false\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n // eslint-disable-next-line\n load: function (args) {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent[\"portals\"] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent[\"portals\"] = this.parent[\"portals\"].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent[\"portals\"]);\n this.parent[\"renderReactTemplates\"]();\n };\n /**\n * Gets the grid height.\n *\n * @returns The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n return \"<div class=\\\"e-fe-text\\\">\" + data.name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div>' +\\n '<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].headerText = getLocaleText(this.parent, columns[i].headerText);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return \"<span class=\\\"e-fe-icon e-fe-folder\\\"></span>\";\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var textEle = args.row.querySelector('.e-fe-text');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n // eslint-disable-next-line\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n // eslint-disable-next-line\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n showSpinner(this.parent.element);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, (this.parent.enableVirtualization) ? args.result : this.gridObj.dataSource);\n args.result = items;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) ||\n ((this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization &&\n this.element.querySelector('.e-content').scrollTop == 0))) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.parent.createdItem) {\n this.selectRecords([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n }\n if (this.parent.layoutSelectedItems.length) {\n this.selectRecords(this.parent.layoutSelectedItems);\n }\n if (this.parent.renamedItem) {\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var items = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n // eslint-disable-next-line\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n // eslint-disable-next-line\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n // eslint-disable-next-line\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imgUrl);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath')) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n // eslint-disable-next-line\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n // eslint-disable-next-line\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n // eslint-disable-next-line\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 180px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 180px');\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n // eslint-disable-next-line\n var info = null;\n // eslint-disable-next-line\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n // eslint-disable-next-line\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n // eslint-disable-next-line\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n this.gridObj.getRowByIndex(args.rowIndex).removeAttribute('tabindex');\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n this.gridObj.getRowByIndex(lastItemIndex).querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n proxy_1.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (proxy_1.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', proxy_1.parent.allowMultiSelection, proxy_1.gridObj.selectionModule);\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = proxy_1.gridObj.getRows().indexOf(row);\n proxy_1.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('data-rowindex'), 10) : null;\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n // eslint-disable-next-line\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focItem = this.getFocusedItem();\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n // eslint-disable-next-line\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1) {\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n // eslint-disable-next-line\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else if (!this.actionDivert) {\n this.addHeaderFocus();\n this.actionDivert = true;\n }\n else {\n this.addFocus(0);\n this.actionDivert = false;\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n // eslint-disable-next-line\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n // eslint-disable-next-line\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n // eslint-disable-next-line\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n // eslint-disable-next-line\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n // eslint-disable-next-line\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function () {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus = select('th.e-fe-grid-name', this.element);\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n // eslint-disable-next-line\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.getRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n // eslint-disable-next-line\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","length","ids","push","names","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","searchSettings","filterType","itemData","getPathObject","caseSensitive","ignoreCase","hiddenItems","showHiddenItems","Search","events.layoutChange","events.search","filter","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","read","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","toLowerCase","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","replace","eventArgs","fileDetails","imageUrl","Date","getTime","toString","trigger","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","Query","sortBy","group","lists","DataManager","executeLocal","getObject","currFiles","feFiles","where","createEmptyElement","top","layoutElement","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","localeString","dateFormat","createdDate","modifiedDate","formatDate","format","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","isRoot","searchData","isNullOrUndefined","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","srcData","dragNodes","tempTarget","dropHandler","dragData","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","navigationpaneModule","treeObj","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","uploadObj","dropArea","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","screenY","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","Array","isArray","events.renameEndParent","events.pathChanged","renameText","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","replaceItems","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","index","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","splice","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","location","multipleFiles","onDeleteSubmit","modified","CLS.VALUE","size","index_1","undefined","map","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","isPrimaryKey","template","initializeCSPTemplate","customAttributes","class","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","CLS.DISPLAY_NONE","enableVirtualization","adjustHeight","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","slice","call","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","ondragstart","_this","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","pane","bar","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","name_1","selected","showThumbnail","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","cList","CLS.CHECK","triggerSelection","startIndex","endIndex","addActive","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","parseInt","getPropertyValue","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","link","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","pasteEle","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","splitterAdjust","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","uploading","onUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","uploadSettings","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","fileData","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","__assign","assign","t","s","n","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","viewText","mergedItems","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","firstChild","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","Math","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","forEach","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getTreeData","getDragPath","getDropPath","nodeData","addChild","prevent","directories","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","obj","itemname","checkDropPath","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","actionDivert","Grid","Resize","Sort","VirtualScroll","checkNameWidth","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","persistSelection","pageSettings","pageSize","enablePersistence","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","reactTemplateRender","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","_fm_modified","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","includes","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","check","getRecords","hasFilter","name_4","dRecords","index.FileManager","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}