@syncfusion/ej2-filemanager 21.2.3 → 22.1.34
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.
- package/.eslintrc.json +1 -0
- package/CHANGELOG.md +18 -0
- package/dist/ej2-filemanager.min.js +2 -2
- package/dist/ej2-filemanager.umd.min.js +2 -2
- package/dist/ej2-filemanager.umd.min.js.map +1 -1
- package/dist/es6/ej2-filemanager.es2015.js +58 -22
- package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
- package/dist/es6/ej2-filemanager.es5.js +57 -22
- package/dist/es6/ej2-filemanager.es5.js.map +1 -1
- package/dist/global/ej2-filemanager.min.js +2 -2
- package/dist/global/ej2-filemanager.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +19 -16
- package/src/file-manager/base/file-manager-model.d.ts +7 -0
- package/src/file-manager/base/file-manager.d.ts +6 -0
- package/src/file-manager/base/file-manager.js +3 -0
- package/src/file-manager/base/interface.d.ts +49 -134
- package/src/file-manager/common/operations.js +16 -2
- package/src/file-manager/common/utility.d.ts +2 -2
- package/src/file-manager/common/utility.js +8 -3
- package/src/file-manager/layout/details-view.js +14 -10
- package/src/file-manager/layout/large-icons-view.js +2 -2
- package/src/file-manager/layout/navigation-pane.js +1 -1
- package/src/file-manager/models/column-model.d.ts +4 -2
- package/src/file-manager/models/column.d.ts +4 -2
- package/src/file-manager/models/details-view-settings-model.d.ts +1 -1
- package/src/file-manager/models/details-view-settings.js +9 -3
- package/src/file-manager/models/search-settings.d.ts +6 -13
- package/src/file-manager/pop-up/context-menu.js +5 -3
- package/src/file-manager/pop-up/dialog.js +1 -0
- package/styles/bootstrap-dark.css +5 -1
- package/styles/bootstrap.css +5 -1
- package/styles/bootstrap4.css +5 -1
- package/styles/bootstrap5-dark.css +5 -1
- package/styles/bootstrap5.css +5 -1
- package/styles/fabric-dark.css +5 -1
- package/styles/fabric.css +5 -1
- package/styles/file-manager/_layout.scss +143 -43
- package/styles/file-manager/_material3-dark-definition.scss +1 -0
- package/styles/file-manager/_material3-definition.scss +260 -0
- package/styles/file-manager/_theme.scss +27 -24
- package/styles/file-manager/bootstrap-dark.css +5 -1
- package/styles/file-manager/bootstrap.css +5 -1
- package/styles/file-manager/bootstrap4.css +5 -1
- package/styles/file-manager/bootstrap5-dark.css +5 -1
- package/styles/file-manager/bootstrap5.css +5 -1
- package/styles/file-manager/fabric-dark.css +5 -1
- package/styles/file-manager/fabric.css +5 -1
- package/styles/file-manager/fluent-dark.css +5 -1
- package/styles/file-manager/fluent.css +5 -1
- package/styles/file-manager/highcontrast-light.css +5 -1
- package/styles/file-manager/highcontrast.css +5 -1
- package/styles/file-manager/icons/_material3-dark.scss +1 -0
- package/styles/file-manager/material-dark.css +5 -1
- package/styles/file-manager/material.css +5 -1
- package/styles/file-manager/material3-dark.css +1621 -0
- package/styles/file-manager/material3-dark.scss +17 -0
- package/styles/file-manager/material3.css +1677 -0
- package/styles/file-manager/material3.scss +17 -0
- package/styles/file-manager/tailwind-dark.css +5 -1
- package/styles/file-manager/tailwind.css +5 -1
- package/styles/fluent-dark.css +5 -1
- package/styles/fluent.css +5 -1
- package/styles/highcontrast-light.css +5 -1
- package/styles/highcontrast.css +5 -1
- package/styles/material-dark.css +5 -1
- package/styles/material.css +5 -1
- package/styles/material3-dark.css +1621 -0
- package/styles/material3-dark.scss +3 -0
- package/styles/material3.css +1677 -0
- package/styles/material3.scss +3 -0
- package/styles/tailwind-dark.css +5 -1
- package/styles/tailwind.css +5 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ej2-filemanager.umd.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"],"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 } 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) {\n for (var i = 0; i < args.length; i++) {\n setValue('_fm_created', new Date(getValue('dateCreated', args[i])), args[i]);\n setValue('_fm_modified', new Date(getValue('dateModified', args[i])), 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.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n parent.originalPath = getFullPath(parent, data, parent.path);\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 * 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 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 }\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 }\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 /* 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 } 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\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 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 if (!isNOU(result.files)) {\n setDateObject(result.files);\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')) {\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 = result.files[0];\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 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 }\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// eslint:disable-next-line\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// eslint:disable-next-line\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 */\n// eslint-disable-next-line\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/* istanbul ignore next */\n// eslint:disable-next-line\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 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 toolbarItems = ['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(toolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\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 } 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: '<span class=\"e-fe-text\">${name}</span>', 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', template: '<span class=\"e-fe-size\">${size}</span>', 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.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.parent.isMobile && 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: true,\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.allowMultiSelection) {\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 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 };\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 };\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.allowMultiSelection) {\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.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 };\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 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 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 // 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 }\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 };\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 } 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 { 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 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 _super.prototype.destroy.call(this);\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)) {\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)) {\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 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 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","import { 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.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 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 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 itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\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 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 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 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 getLocaleText(this.parent, 'View') + '></button>'\n };\n break;\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 };\n break;\n }\n items.push(item);\n }\n return items;\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 if (e.newProp.toolbarSettings.items !== undefined) {\n this.items = this.toolbarItemData(this.getItems(e.newProp.toolbarSettings.items.map(function (item) { return item.trim(); })));\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 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: true,\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 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 // eslint-disable-next-line\n this.treeObj.addNodes(directories, target, null, prevent);\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 && args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1]) {\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 && sNode.querySelector('.e-list-text').innerHTML !== this.parent.pathNames[this.parent.pathNames.length - 1]) {\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 this.expandNodeTarget = null;\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 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.removeChildNodes(id);\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 } 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 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 /**\n * Gets the grid height.\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: '<div class=\"e-fe-text\">${name}</div><div class=\"e-fe-date\">${_fm_modified}</div>' +\n '<span class=\"e-fe-size\">${size}</span>'\n }\n ];\n }\n else {\n columns = JSON.parse(JSON.stringify(this.parent.detailsViewSettings.columns));\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, template: '<span class=\"e-fe-icon ${_fm_iconClass}\"></span>',\n allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: '<span class=\"e-fe-icon e-fe-folder\"></span>'\n };\n columns.unshift(icon);\n if (this.parent.allowMultiSelection) {\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 var num = Number(value.replace(/,/g, ''));\n value = num.toLocaleString(intl.culture);\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 }\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 (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 = dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName(\"e-rowcell e-templatecell\")[0].nextElementSibling) {\n name = 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.parent.isMobile && 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: true,\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 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 if (this.parent.allowMultiSelection && !isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n var checkItem = item.querySelector('.e-checkselect');\n checkItem.focus();\n }\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 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"],"names":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","element","matched","getParents","names","i","length","push","getPathNames","ids","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","removeActive","parent","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","feParent","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","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","key","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","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","len","openSearchFolder","events.clearPathInit","selectedNode","originalPath","events.initialEnd","events.finalizeEnd","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","srcData","dragNodes","tempTarget","oldPath","newPath","getDirectoryPath","cwd","doPasteUpdate","operation","result","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","dropData","expandedId","events.pathDrag","navigationpaneModule","treeObj","document","events.dropPath","createVirtualDragElement","dragData","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","dropHandler","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","draggingHandler","canDrop","setTimeout","events.dragging","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","setValue","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","root","generatePath","setDateObject","rootId","dirs","setNodeId","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","parentElement","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","renameText","events.renameEndParent","events.pathChanged","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","replaceItems","options","formattedString","intl","strArr","location","header","content","buttons","dialogName","open","triggerPopupOpen","close","triggerPopupClose","multipleFiles","buttonModel","isPrimary","onSubmit","createInput","oninput","onValidate","onkeyup","getKeyCode","focus","setSelectionRange","focusInput","bind","this","events.deleteInit","onDeleteSubmit","onReSubmit","inputEle","txt","showFileExtension","index","onFocusRenameInput","Internationalization","formatDate","modified","format","CLS.VALUE","str","keys","Object","objectToString","size","index_1","undefined","map","val","substr","every","arr","toLocaleUpperCase","events.actionFailure","CLS.ERROR_CONTENT","getOptions","Dialog","beforeOpen","keydownAction","beforeClose","triggerPopupBeforeClose","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","dataBind","show","changeOptions","extOptions","duplicateContent","extDialogObj","records","getDuplicateData","item_1","indexval","item_2","ind","retryFiles","isRetryOpened","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","isApplySame","checked","retryDlgClose","retryDlgUpdate","splice","events.skipUpload","getExtOptions","beforeExtOpen","CLS.EXTN_DIALOG_ID","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","isKeepBoth","retryArgs","retry","onKeepBothAll","onReplaceAll","flag","placeholder","Input","properties","preventKeydown","selectAll","dlgName","btnElement","_loop_1","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","position","X","Y","updateImage","resizing","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","toolbarItems","ToolbarSettings","SearchSettings","columnArray","headerText","minWidth","isPrimaryKey","template","customAttributes","class","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","TOOLBAR_ID","LAYOUT_ID","TREE_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","UPLOAD_DIALOG_ID","CONTEXT_MENU_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","CHECK_SELECT","ROOT_POPUP","MOBILE","MOB_POPUP","MULTI_SELECT","FILTER","LAYOUT_CONTENT","LARGE_ICONS","TB_ITEM","LIST_ITEM","LIST_TEXT","LIST_PARENT","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_ITEM","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_VIEW","ICON_OPEN","ICON_UPLOAD","ICON_CUT","ICON_COPY","ICON_PASTE","ICON_DELETE","ICON_RENAME","ICON_NEWFOLDER","ICON_DETAILS","ICON_SHORTBY","ICON_REFRESH","ICON_SELECTALL","ICON_DOWNLOAD","ICON_GRID","ICON_LARGE","ICON_BREADCRUMB","ICON_CLEAR","ICONS","ERROR_CONTENT","DISPLAY_NONE","FULLROW","SPLIT_BAR","HEADER_CHECK","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","filterEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","splitterResize","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","layoutRefresh","actionFailure","search","openInit","openEnd","selectionChanged","selectAllInit","clearAllInit","clearPathInit","layoutChange","sortByChange","nodeExpand","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","selectedData","cutCopyInit","pasteInit","pasteEnd","cutEnd","hideLayout","updateTreeSelection","sortColumn","pathColumn","searchTextChange","downloadInit","dropInit","dragEnd","dragging","updateSelectionData","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","events.hideLayout","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","CLS.LIST_PARENT","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","allowMultiSelection","checkElement","createCheckBox","firstElementChild","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","doSelection","ctrlKey","shiftKey","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.selectedData","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.selectAllInit","events.clearAllInit","events.menuItemData","onMenuItemData","events.splitterResize","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","events.layoutRefresh","onDropPath","events.updateSelectionData","events.filterEnd","on","currentSelected","_i","_a","newProp","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","eventName","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","CLS.MULTI_SELECT","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","getBoundingClientRect","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","isNullOrUndefined","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","CLS.ICONS","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","subMenuSpan","DropDownButton","CLS.ICON_BREADCRUMB","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","events.updateTreeSelection","CLS.FILTER","list","liElementId","link","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","CLS.CONTEXT_MENU_ID","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","CLS.FULLROW","targetElement","getTargetView","updateActiveModule","CLS.TOOLBAR_ID","setLayoutItem","CLS.MENU_ITEM","CLS.TREE_ID","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","pasteEle","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","CLS.ICON_VIEW","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","layout","nameEle","menuClickArgs","sItems","events.downloadInit","openFileOnContextMenuClick","separator","CLS.ICON_OPEN","CLS.ICON_UPLOAD","CLS.ICON_CUT","CLS.ICON_COPY","CLS.ICON_PASTE","CLS.ICON_DELETE","CLS.ICON_RENAME","CLS.ICON_NEWFOLDER","CLS.ICON_DETAILS","CLS.ICON_SHORTBY","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","CLS.ICON_REFRESH","CLS.ICON_SELECTALL","CLS.ICON_DOWNLOAD","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","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","splitterObj","collapse","CLS.SPLIT_BAR","renderComplete","CLS.MOBILE","CLS.CHECK_SELECT","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","CLS.LAYOUT_CONTENT","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","CLS.UPLOAD_DIALOG_ID","toolbar","toolBarHeight","clientHeight","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","currfolders","folders","setNextPath","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","disableToolbarItems","toolbarModule","enableToolbarItems","disableMenuItems","contextmenuModule","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","tool","toolbarClickArgs","CLS.TB_ITEM","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","updateSortByButton","itemCount","itemTooltip","spanElement","tooltipText","prefixIcon","showTextOn","suffixIcon","CLS.ICON_CLEAR","overflow","align","onSelectionChanged","reRenderToolbar","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","addNodes","selecEventArgs","sNode","expandNodeTarget","onPathDrag","selectResultNode","events.nodeExpand","onNodeExpanded","innerHtml","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","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","iWidth","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","sizeFormat","formatNumber","Number","toLocaleString","culture","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","CLS.HEADER_CHECK","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","tabIndex","check","getRecords","hasFilter","name_4","dRecords"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ej2-filemanager.umd.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"],"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 } 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.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n parent.originalPath = getFullPath(parent, data, parent.path);\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 * 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 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 }\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 }\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 /* 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\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')) {\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 = result.files[0];\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 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 }\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// eslint:disable-next-line\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// eslint:disable-next-line\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 */\n// eslint-disable-next-line\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/* istanbul ignore next */\n// eslint:disable-next-line\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 parent.renamedId = getValue('id', parent.itemData[0]);\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 toolbarItems = ['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(toolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\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.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.parent.isMobile && 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: true,\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 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 };\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 };\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.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 };\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 // 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 }\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 };\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 } 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 { 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 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 _super.prototype.destroy.call(this);\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)) {\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)) {\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 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","import { 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.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 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 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 itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\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 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 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 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 getLocaleText(this.parent, 'View') + '></button>'\n };\n break;\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 };\n break;\n }\n items.push(item);\n }\n return items;\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 if (e.newProp.toolbarSettings.items !== undefined) {\n this.items = this.toolbarItemData(this.getItems(e.newProp.toolbarSettings.items.map(function (item) { return item.trim(); })));\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 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: true,\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 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 // eslint-disable-next-line\n this.treeObj.addNodes(directories, target, null, prevent);\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 && sNode.querySelector('.e-list-text').innerHTML !== this.parent.pathNames[this.parent.pathNames.length - 1]) {\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 this.expandNodeTarget = null;\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 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.removeChildNodes(id);\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 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 /**\n * Gets the grid height.\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 }\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 (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 = dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName(\"e-rowcell e-templatecell\")[0].nextElementSibling) {\n name = 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.parent.isMobile && 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: true,\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 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 if (this.parent.allowMultiSelection && !isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n var checkItem = item.querySelector('.e-checkselect');\n checkItem.focus();\n }\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"],"names":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","element","matched","getParents","names","i","length","push","getPathNames","ids","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","removeActive","parent","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","feParent","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","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","key","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","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","len","openSearchFolder","events.clearPathInit","selectedNode","originalPath","events.initialEnd","events.finalizeEnd","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","srcData","dragNodes","tempTarget","oldPath","newPath","getDirectoryPath","cwd","doPasteUpdate","operation","result","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","dropData","expandedId","events.pathDrag","navigationpaneModule","treeObj","document","events.dropPath","createVirtualDragElement","dragData","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","dropHandler","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","draggingHandler","canDrop","setTimeout","events.dragging","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","setValue","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","root","generatePath","intl","Internationalization","localeString","dateFormat","createdDate","modifiedDate","formatDate","format","setDateObject","getDateFormat","rootId","dirs","setNodeId","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","parentElement","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","renameText","events.renameEndParent","events.pathChanged","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","replaceItems","options","formattedString","strArr","location","header","content","buttons","dialogName","open","triggerPopupOpen","close","triggerPopupClose","multipleFiles","buttonModel","isPrimary","onSubmit","createInput","oninput","onValidate","onkeyup","getKeyCode","focus","setSelectionRange","focusInput","bind","this","events.deleteInit","onDeleteSubmit","onReSubmit","inputEle","txt","showFileExtension","index","onFocusRenameInput","modified","CLS.VALUE","str","keys","Object","objectToString","size","index_1","undefined","map","val","substr","every","arr","toLocaleUpperCase","events.actionFailure","CLS.ERROR_CONTENT","getOptions","Dialog","beforeOpen","keydownAction","beforeClose","triggerPopupBeforeClose","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","dataBind","show","changeOptions","extOptions","duplicateContent","extDialogObj","records","getDuplicateData","item_1","indexval","item_2","ind","retryFiles","isRetryOpened","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","isApplySame","checked","retryDlgClose","retryDlgUpdate","splice","events.skipUpload","getExtOptions","beforeExtOpen","CLS.EXTN_DIALOG_ID","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","isKeepBoth","retryArgs","retry","onKeepBothAll","onReplaceAll","flag","placeholder","Input","properties","preventKeydown","selectAll","dlgName","btnElement","_loop_1","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","position","X","Y","updateImage","resizing","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","toolbarItems","ToolbarSettings","SearchSettings","columnArray","headerText","minWidth","isPrimaryKey","template","initializeCSPTemplate","customAttributes","class","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","TOOLBAR_ID","LAYOUT_ID","TREE_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","UPLOAD_DIALOG_ID","CONTEXT_MENU_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","CHECK_SELECT","ROOT_POPUP","MOBILE","MOB_POPUP","MULTI_SELECT","FILTER","LAYOUT_CONTENT","LARGE_ICONS","TB_ITEM","LIST_ITEM","LIST_TEXT","LIST_PARENT","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_ITEM","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_VIEW","ICON_OPEN","ICON_UPLOAD","ICON_CUT","ICON_COPY","ICON_PASTE","ICON_DELETE","ICON_RENAME","ICON_NEWFOLDER","ICON_DETAILS","ICON_SHORTBY","ICON_REFRESH","ICON_SELECTALL","ICON_DOWNLOAD","ICON_GRID","ICON_LARGE","ICON_BREADCRUMB","ICON_CLEAR","ICONS","ERROR_CONTENT","DISPLAY_NONE","FULLROW","SPLIT_BAR","HEADER_CHECK","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","filterEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","splitterResize","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","layoutRefresh","actionFailure","search","openInit","openEnd","selectionChanged","selectAllInit","clearAllInit","clearPathInit","layoutChange","sortByChange","nodeExpand","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","selectedData","cutCopyInit","pasteInit","pasteEnd","cutEnd","hideLayout","updateTreeSelection","sortColumn","pathColumn","searchTextChange","downloadInit","dropInit","dragEnd","dragging","updateSelectionData","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","events.hideLayout","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","CLS.LIST_PARENT","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","firstElementChild","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","doSelection","ctrlKey","shiftKey","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.selectedData","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.selectAllInit","events.clearAllInit","events.menuItemData","onMenuItemData","events.splitterResize","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","events.layoutRefresh","onDropPath","events.updateSelectionData","events.filterEnd","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","eventName","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","CLS.MULTI_SELECT","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","getBoundingClientRect","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","isNullOrUndefined","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","CLS.ICONS","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","subMenuSpan","DropDownButton","CLS.ICON_BREADCRUMB","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","events.updateTreeSelection","CLS.FILTER","list","liElementId","link","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","CLS.CONTEXT_MENU_ID","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","CLS.FULLROW","targetElement","getTargetView","updateActiveModule","CLS.TOOLBAR_ID","setLayoutItem","CLS.MENU_ITEM","CLS.TREE_ID","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","pasteEle","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","CLS.ICON_VIEW","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","layout","nameEle","menuClickArgs","sItems","events.downloadInit","openFileOnContextMenuClick","separator","CLS.ICON_OPEN","CLS.ICON_UPLOAD","CLS.ICON_CUT","CLS.ICON_COPY","CLS.ICON_PASTE","CLS.ICON_DELETE","CLS.ICON_RENAME","CLS.ICON_NEWFOLDER","CLS.ICON_DETAILS","CLS.ICON_SHORTBY","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","CLS.ICON_REFRESH","CLS.ICON_SELECTALL","CLS.ICON_DOWNLOAD","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","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","splitterObj","collapse","CLS.SPLIT_BAR","renderComplete","CLS.MOBILE","CLS.CHECK_SELECT","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","CLS.LAYOUT_CONTENT","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","CLS.UPLOAD_DIALOG_ID","toolbar","toolBarHeight","clientHeight","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","currfolders","folders","setNextPath","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","disableToolbarItems","toolbarModule","enableToolbarItems","disableMenuItems","contextmenuModule","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","tool","toolbarClickArgs","CLS.TB_ITEM","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","updateSortByButton","itemCount","itemTooltip","spanElement","tooltipText","prefixIcon","showTextOn","suffixIcon","CLS.ICON_CLEAR","overflow","align","onSelectionChanged","reRenderToolbar","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","addNodes","selecEventArgs","sNode","expandNodeTarget","onPathDrag","selectResultNode","events.nodeExpand","onNodeExpanded","innerHtml","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","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","CLS.HEADER_CHECK","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","tabIndex","check","getRecords","hasFilter","name_4","dRecords"],"mappings":"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"}
|