@syncfusion/ej2-filemanager 20.4.43 → 20.4.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/GitLeaksReport.json +1 -0
  3. package/dist/ej2-filemanager.min.js +2 -2
  4. package/dist/ej2-filemanager.umd.min.js +2 -2
  5. package/dist/ej2-filemanager.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-filemanager.es2015.js +326 -207
  7. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  8. package/dist/es6/ej2-filemanager.es5.js +332 -230
  9. package/dist/es6/ej2-filemanager.es5.js.map +1 -1
  10. package/dist/global/ej2-filemanager.min.js +2 -2
  11. package/dist/global/ej2-filemanager.min.js.map +1 -1
  12. package/dist/global/index.d.ts +1 -1
  13. package/gitleaks-ci/gitleaks +0 -0
  14. package/gitleaks-ci.tar.gz +0 -0
  15. package/package.json +15 -15
  16. package/src/file-manager/actions/toolbar.js +1 -1
  17. package/src/file-manager/actions/virtualization.d.ts +40 -5
  18. package/src/file-manager/actions/virtualization.js +131 -59
  19. package/src/file-manager/base/file-manager-model.d.ts +10 -14
  20. package/src/file-manager/base/file-manager.d.ts +8 -12
  21. package/src/file-manager/base/file-manager.js +5 -5
  22. package/src/file-manager/base/interface.d.ts +1 -0
  23. package/src/file-manager/layout/details-view.d.ts +6 -0
  24. package/src/file-manager/layout/details-view.js +43 -20
  25. package/src/file-manager/layout/large-icons-view.js +41 -10
  26. package/src/file-manager/layout/navigation-pane.js +14 -5
  27. package/src/file-manager/models/column-model.d.ts +7 -0
  28. package/src/file-manager/models/column.d.ts +6 -0
  29. package/src/file-manager/models/column.js +3 -0
  30. package/src/file-manager/models/details-view-settings.js +1 -1
  31. package/src/file-manager/models/index.d.ts +0 -2
  32. package/src/file-manager/models/index.js +0 -1
  33. package/src/file-manager/pop-up/context-menu.js +3 -0
@@ -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/virtualization-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);\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 }\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) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n switch (text) {\n case 'date':\n field = '_fm_modified';\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, getParentPath, 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 (parent.activeModule === 'navigationpane') {\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getParentPath(parent.path));\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, getParentPath, 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') ? getParentPath(parent.path) : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var 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,\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>'\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';\n/**\n * Specifies the virtualization settings of the File Manager.\n */\nvar VirtualizationSettings = /** @class */ (function (_super) {\n __extends(VirtualizationSettings, _super);\n function VirtualizationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], VirtualizationSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(20)\n ], VirtualizationSettings.prototype, \"detailsViewItemsCount\", void 0);\n __decorate([\n Property(40)\n ], VirtualizationSettings.prototype, \"largeIconsViewItemsCount\", void 0);\n return VirtualizationSettings;\n}(ChildProperty));\nexport { VirtualizationSettings };\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 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.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 // if (this.parent.virtualizationSettings.enable) {\n // this.items = this.allItems.slice(0, this.parent.virtualizationSettings.largeIconsViewItemsCount);\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 iconsView.classList.remove(CLS.DISPLAY_NONE);\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.virtualizationSettings.enable && 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 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 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 this.clearSelection();\n }\n if (!isNOU(item)) {\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 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 this.navigateItem(lastItem);\n break;\n case 'home':\n this.navigateItem(firstItem);\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 (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 = this.getItemObject(item);\n var eventArgs = {\n action: action, fileDetails: data, isInteracted: this.isInteraction, cancel: false, target: 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 = this.getItemObject(item);\n this.parent.visitedData = data;\n var eventArgs = { action: action, fileDetails: data, 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 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 this.disabledItems.push('Open');\n }\n else if (this.parent.selectedItems.length !== 1) {\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) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\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, VirtualizationSettings } 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.virtualizationSettings.enable) {\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 uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\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 Complex({}, VirtualizationSettings)\n ], FileManager.prototype, \"virtualizationSettings\", 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('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 items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\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) {\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, getValue, addClass, select, closest } 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.largeIconsViewItemsCount = 40;\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n // Update the scroller height based on the items count.\n Virtualization.prototype.setUlElementHeight = function () {\n this.rowItemCount = this.ValidateItemCount(Object.keys(this.largeIconInstance.allItems).length);\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.largeIconsViewItemsCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.largeIconsViewItemsCount) % this.rowItemCount : this.rowItemCount;\n this.topElement = this.filemanagerInstance.createElement('div');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top')) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'));\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.renderedCount = this.largeIconsViewItemsCount;\n };\n // Calculated the maximum number of items can be rendered in each row.\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var width = parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth));\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-right')) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-left'));\n var itemCount = Math.floor(width / (this.largeIconInstance.itemList[0].offsetWidth + marginValue));\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n // Bind the scroll event for large icons view ul element.\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll, this);\n }\n else {\n EventHandler.remove(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll);\n }\n };\n // Update the top and bottom element height and update the scroll position.\n Virtualization.prototype.onVirtualUiScroll = function (e) {\n var _a;\n var startingHeight = 0;\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\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 // checked whether the scrolling is upward/downward\n if (scroll > this.scrollPosition) {\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n this.onNormalScroll(listDiff, true);\n }\n else {\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n this.onNormalScroll(listDiff, false);\n }\n }\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n this.scrollPosition = scroll;\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.largeIconsViewItemsCount, this.renderedCount);\n };\n // Calculated the scroller height.\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n return ((this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight) <= 0) ? 0 :\n (this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight);\n };\n // Update the UI based on the scrolled position.\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n for (var i = 0; i < listDiff; i++) {\n this.updateUI(isScrollingDown);\n }\n this.updateSelection();\n };\n // Updating the items in large icons view dynamically.\n Virtualization.prototype.updateUI = function (isScrollingDown) {\n var _this = this;\n if (isScrollingDown) {\n this.items = this.largeIconInstance.allItems.slice(this.renderedCount, this.renderedCount + this.rowItemCount);\n if (this.items.length > 0) {\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.itemList.forEach(function (liEle) {\n _this.largeIconInstance.element.firstElementChild.insertBefore(liEle, _this.bottomElement);\n });\n this.renderedCount = (this.largeIconInstance.allItems.length >= this.renderedCount + this.rowItemCount) ?\n this.renderedCount + this.rowItemCount : this.renderedCount + this.lastRowCount;\n for (var i_1 = 0; i_1 < this.rowItemCount; i_1++) {\n detach(this.topElement.nextElementSibling);\n }\n }\n }\n else {\n var lastItemIndex = void 0;\n var isAllRendered = void 0;\n if (this.renderedCount == this.largeIconInstance.allItems.length) {\n lastItemIndex = this.renderedCount - (this.largeIconsViewItemsCount - this.rowItemCount + this.lastRowCount);\n this.renderedCount = ((this.renderedCount - this.lastRowCount) < this.largeIconsViewItemsCount) ?\n this.largeIconsViewItemsCount : (this.renderedCount - this.lastRowCount);\n isAllRendered = true;\n }\n else {\n lastItemIndex = this.renderedCount - this.largeIconsViewItemsCount;\n this.renderedCount = ((this.renderedCount - this.rowItemCount) < this.largeIconsViewItemsCount) ?\n this.largeIconsViewItemsCount : (this.renderedCount - this.rowItemCount);\n }\n var startItemIndex = (lastItemIndex - this.rowItemCount > 0) ? lastItemIndex - this.rowItemCount : 0;\n this.items = this.largeIconInstance.allItems.slice(startItemIndex, lastItemIndex);\n if (this.items.length > 0) {\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\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 for (var i = 0; i < ((isAllRendered) ? this.lastRowCount : this.rowItemCount); i++) {\n detach(this.bottomElement.previousElementSibling);\n }\n }\n }\n };\n // Update the selected item state.\n Virtualization.prototype.updateSelection = function () {\n for (var i = 0; i < this.filemanagerInstance.selectedItems.length; i++) {\n for (var j = 0; j < this.items.length; j++) {\n if (this.filemanagerInstance.selectedItems[i] == getValue('name', this.items[j])) {\n this.updateCheckState(this.itemList[j]);\n }\n }\n }\n };\n // Update the check state for items.\n Virtualization.prototype.updateCheckState = function (liItem) {\n if (this.filemanagerInstance.allowMultiSelection) {\n addClass([liItem], [CLS.ACTIVE]);\n liItem.setAttribute('aria-selected', 'true');\n var checkEle = select('.' + CLS.FRAME, liItem);\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 };\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 Virtualization.prototype.destroy = function () {\n if (this.filemanagerInstance.isDestroyed) {\n return;\n }\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 } 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.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.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 var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.treeObj.selectedNodes = this.isNodeClickCalled ? this.previousSelected : this.treeObj.selectedNodes;\n this.previousSelected = this.treeObj.selectedNodes;\n if (!isNOU(this.parent) && !isNOU(this.parent.contextmenuModule)) {\n this.parent.contextmenuModule.contextMenu.enableItems(['Open'], true);\n }\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 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 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 }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isPathDragged && !this.isRenameParent) {\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 updatePath(args.node, this.parent.itemData[0], this.parent);\n if (previousPath !== this.parent.path) {\n this.expandNodeTarget = null;\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = 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 }\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 };\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 };\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)\n this.updateTree(args);\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 this.isRenameParent = true;\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 this.treeObj.selectedNodes = [getValue('_fm_id', resultObj)];\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 },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n // enableVirtualization: this.parent.virtualizationSettings.enable,\n enablePersistence: this.parent.enablePersistence,\n // enableVirtualMaskRow: true,\n // pageSettings: { pageSize: this.parent.virtualizationSettings.detailsViewItemsCount },\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 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 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 value = intl.formatNumber((sizeValue / 1024), { format: 'n' });\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 // if (!this.parent.virtualizationSettings.enable) {\n showSpinner(this.parent.element);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, this.gridObj.dataSource);\n args.result = items;\n // }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n // if ((this.parent.selectedItems.length !== 0 && !this.parent.virtualizationSettings.enable) || \n // ((this.parent.selectedItems.length !== 0 && this.parent.virtualizationSettings.enable && \n // this.element.querySelector('.e-content').scrollTop == 0))) {\n if (this.parent.selectedItems.length !== 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 }\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 };\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 }\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 }\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 }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\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 (len > 0) {\n // if (this.parent.virtualizationSettings.enable) {\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.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 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","matched","getParents","ids","i","length","push","getPathId","pathNames","element","names","getPathNames","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","substring","lastIndexOf","field","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","len","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","events.renameEndParent","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","renameText","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","template","customAttributes","class","DetailsViewSettings","VirtualizationSettings","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","FRAME","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","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","listElements","ListBase","createListFromJson","itemList","slice","call","preventImgDrag","createDragObj","CLS.DISPLAY_NONE","emptyList","CLS.LIST_PARENT","selectItems","activeEle","CLS.ACTIVE","adjustHeight","maxHeight","getItemCount","wireEvents","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.pathChanged","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","CLS.FRAME","startIndex","endIndex","addActive","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","navigateItem","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","isVisible","liParent","liScrPos","scrollTop","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","getBoundingClientRect","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","getPropertyValue","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","parseInt","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","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","virtualizationSettings","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","largeIconsViewItemsCount","filemanagerInstance","largeIconInstance","setUlElementHeight","rowItemCount","ValidateItemCount","lastRowCount","topElement","firstChild","bottomElement","marginValue","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","Math","floor","wireScrollEvent","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","round","onNormalScroll","startingHeight","isScrollingDown","updateUI","updateSelection","forEach","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","updateCheckState","liItem","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","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","expandNodeTarget","onPathDrag","selectResultNode","events.nodeExpand","onNodeExpanded","innerHtml","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","itemname","checkDropPath","obj","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","actionDivert","Grid","Resize","Sort","VirtualScroll","checkNameWidth","columns","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","detailsViewSettings","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enablePersistence","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","beforeCopy","load","focusModule","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","iWidth","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","selectedRowIndex","rData","onSortColumn","sortModule","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","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) {\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);\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 }\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) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n switch (text) {\n case 'date':\n field = '_fm_modified';\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, getParentPath, 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 (parent.activeModule === 'navigationpane') {\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getParentPath(parent.path));\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, getParentPath, 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') ? getParentPath(parent.path) : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var 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>'\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.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 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 this.clearSelection();\n }\n if (!isNOU(item)) {\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 = this.getItemObject(item);\n var eventArgs = {\n action: action, fileDetails: data, isInteracted: this.isInteraction, cancel: false, target: 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 = this.getItemObject(item);\n this.parent.visitedData = data;\n var eventArgs = { action: action, fileDetails: data, 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 this.disabledItems.push('Open');\n }\n else if (this.parent.selectedItems.length !== 1) {\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) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\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 uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\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 items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\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.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.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 var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n args.cancel = eventArgs.cancel;\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.selectedNodes = [args.node.getAttribute(\"data-uid\")];\n if (!isNOU(this.parent) && !isNOU(this.parent.contextmenuModule)) {\n this.parent.contextmenuModule.contextMenu.enableItems(['Open'], true);\n }\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 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 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 }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isPathDragged && !this.isRenameParent) {\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 if (!this.isRightClick) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node);\n this.parent.visitedItem = args.node;\n }\n if (previousPath !== this.parent.path) {\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 (!this.isRightClick) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = 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 }\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 };\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 };\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)\n this.updateTree(args);\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 this.treeObj.selectedNodes = [getValue('_fm_id', resultObj)];\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 value = intl.formatNumber((sizeValue / 1024), { format: 'n' });\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 }\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 }\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","substring","lastIndexOf","field","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","len","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","events.renameEndParent","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","renameText","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","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.pathChanged","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","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","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","expandNodeTarget","onPathDrag","selectResultNode","events.nodeExpand","onNodeExpanded","innerHtml","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","itemname","checkDropPath","obj","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","actionDivert","Grid","Resize","Sort","VirtualScroll","checkNameWidth","columns","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","detailsViewSettings","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","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","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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"}