@syncfusion/ej2-filemanager 32.2.7 → 33.1.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ej2-filemanager.min.js +2 -2
- package/dist/ej2-filemanager.umd.min.js +2 -2
- package/dist/ej2-filemanager.umd.min.js.map +1 -1
- package/dist/es6/ej2-filemanager.es2015.js +10 -4
- package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
- package/dist/es6/ej2-filemanager.es5.js +12 -4
- package/dist/es6/ej2-filemanager.es5.js.map +1 -1
- package/dist/global/ej2-filemanager.min.js +2 -2
- package/dist/global/ej2-filemanager.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +11 -11
- package/src/file-manager/actions/toolbar.js +8 -0
- package/src/file-manager/models/default-locale.js +2 -2
- package/src/file-manager/pop-up/context-menu.js +2 -2
- package/styles/bootstrap4-lite.css +5 -1
- package/styles/bootstrap4.css +5 -1
- package/styles/bootstrap5-dark-lite.css +4 -0
- package/styles/bootstrap5-dark.css +4 -0
- package/styles/bootstrap5-lite.css +5 -1
- package/styles/bootstrap5.css +5 -1
- package/styles/file-manager/_bootstrap4-definition.scss +3 -0
- package/styles/file-manager/_bootstrap5-dark-definition.scss +3 -0
- package/styles/file-manager/_bootstrap5-definition.scss +3 -0
- package/styles/file-manager/_fluent2-definition.scss +1 -0
- package/styles/file-manager/_theme.scss +10 -1
- package/styles/file-manager/bootstrap4.css +5 -1
- package/styles/file-manager/bootstrap5-dark.css +4 -0
- package/styles/file-manager/bootstrap5.css +5 -1
- package/styles/file-manager/fluent2.css +1 -0
- package/styles/file-manager/material3-dark.css +0 -5
- package/styles/file-manager/material3.css +0 -5
- package/styles/fluent2-lite.css +1 -0
- package/styles/fluent2.css +1 -0
- package/styles/material3-dark-lite.css +0 -5
- package/styles/material3-dark.css +0 -5
- package/styles/material3-lite.css +0 -5
- package/styles/material3.css +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-filemanager.min.js","sources":["../../src/file-manager/common/utility.js","../../src/file-manager/common/operations.js","../../src/file-manager/pop-up/dialog.js","../../src/file-manager/models/ajax-settings.js","../../src/file-manager/models/toolbar-settings.js","../../src/file-manager/models/search-settings.js","../../src/file-manager/models/details-view-settings.js","../../src/file-manager/models/contextMenu-settings.js","../../src/file-manager/models/navigation-pane-settings.js","../../src/file-manager/models/upload-settings.js","../../src/file-manager/models/column.js","../../src/file-manager/base/classes.js","../../src/file-manager/base/constant.js","../../src/file-manager/layout/large-icons-view.js","../../src/file-manager/actions/breadcrumb-bar.js","../../src/file-manager/pop-up/context-menu.js","../../src/file-manager/models/default-locale.js","../../src/file-manager/base/file-manager.js","../../src/file-manager/actions/toolbar.js","../../src/file-manager/actions/virtualization.js","../../src/file-manager/layout/navigation-pane.js","../../src/file-manager/layout/details-view.js","../../src/global.js"],"sourcesContent":["import * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { read, paste, Search, filter, Download, Delete, isFileSystemData } from '../common/operations';\nimport { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, detach } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createDialog } from '../pop-up/dialog';\n/**\n * Utility function to compare two strings in a way similar to Windows Explorer.\n * Files and folders are sorted separately, with folders coming before files.\n *\n * @param {string} reference - The first string to compare. This could be a file or folder name.\n * @param {string} comparer - The second string to compare. This could be a file or folder name.\n * @returns {number} - A negative number if `reference` should come before `comparer`, a positive number if `comparer` should come before `reference`, and 0 if they are considered equal.\n */\nexport function sortComparer(reference, comparer) {\n // Check if reference and comparer are files or folders\n var referenceIsFile = /\\.\\S+/.test(reference);\n var comparerIsFile = /\\.\\S+/.test(comparer);\n // If one is a file and the other is a folder, the folder should come first\n if (referenceIsFile && !comparerIsFile) {\n return 1;\n }\n if (!referenceIsFile && comparerIsFile) {\n return -1;\n }\n var referenceParts = [];\n var comparerParts = [];\n (reference + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { referenceParts.push([$1 || Infinity, $2 || '']); return ''; });\n (comparer + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { comparerParts.push([$1 || Infinity, $2 || '']); return ''; });\n // Compare each part of reference and comparer\n while (referenceParts.length && comparerParts.length) {\n var referencePart = referenceParts.shift();\n var comparerPart = comparerParts.shift();\n if (referencePart && comparerPart) {\n var comparisonResult = referencePart[0] - comparerPart[0] ||\n referencePart[1].localeCompare(comparerPart[1]);\n if (comparisonResult) {\n return comparisonResult;\n }\n }\n }\n return referenceParts.length - comparerParts.length;\n}\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 */\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, instance) }, true);\n instance.pathId = getPathId(node, instance);\n instance.pathNames = getPathNames(node, text, instance);\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 * @param {IFileManager} instance - specifies the control instance.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId, instance) {\n var matched = getParents(element, text, false, hasId, instance);\n var path = '/';\n var len = matched.length - (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 * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node, instance) {\n var matched = getParents(node, node.getAttribute('data-uid'), true, false, instance);\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 * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text, instance) {\n var matched = getParents(element, text, false, false, instance);\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 * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId, instance) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var data = [{}];\n if (!isNOU(instance) && !isNOU(instance.navigationpaneModule) && !isNOU(instance.navigationpaneModule.treeObj)) {\n data = instance.navigationpaneModule.treeObj.getTreeData(el);\n }\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') : getValue('name', data[0]));\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 = '/';\n var i = 1;\n for (i; i < parent.pathId.length; i++) {\n var data = getValue(parent.pathId[parseInt(i.toString(), 10)], 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 * Get all child items\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent ID.\n * @returns {Object[]} An array of child items\n * @private\n */\nexport function getAllChildItems(parent, parentId) {\n var children = parent.fileSystemData.filter(function (item) {\n return String(item.parentId) === String(parentId);\n });\n var allChildren = children.slice();\n children.forEach(function (child) {\n var childId = child.id;\n allChildren = allChildren.concat(getAllChildItems(parent, childId));\n });\n return allChildren;\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 (isFileSystemData(parent)) {\n if (value === '') {\n parent.itemData = parent.fileSystemData;\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n else {\n parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;\n var currData = getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n var parentId = getValue('id', currData);\n var filteredData = getAllChildItems(parent, parentId);\n var data = new DataManager(filteredData).\n executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));\n var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;\n parent.itemData = data;\n parent.responseData.error = null;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchValue, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n return;\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') || element.classList.contains('e-text-content')) {\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 */\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 */\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 {BeforeImageLoadEventArgs} - returns the eventargs.\n * @private\n */\nexport function getImageUrl(parent, item) {\n var imgUrl = isFileSystemData(parent) ? getValue('imageUrl', item) : '';\n if (isFileSystemData(parent)) {\n var eventArgs_1 = {\n fileDetails: [item],\n imageUrl: imgUrl,\n useImageAsUrl: true\n };\n parent.trigger('beforeImageLoad', eventArgs_1);\n return eventArgs_1;\n }\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\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 data = { 'action': 'getImage', 'path': parent.path + fileName, 'id': getValue('id', item) };\n var ajaxSettings = {\n url: baseUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl,\n useImageAsUrl: true,\n ajaxSettings: ajaxSettings\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs;\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 */\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, '/').replace(/^.*?(?=\\/)/, '') + 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 */\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 */\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None' && !isNullOrUndefined(parent.sortOrder)) {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\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 */\nexport function getObject(parent, key, value) {\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var result = currFiles.filter(function (data) { return data[key].toString() === value; });\n return result[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 = parent.uploadObj.dropArea == null ? getLocaleText(parent, '') : 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 */\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 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 */\nexport function setDateObject(args) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n setValue('_fm_created', createdDate, args[i]);\n setValue('_fm_modified', modifiedDate, args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @param {IFileManager} [parent] - optional parameter representing the parent IFileManager.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n 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 var data = getObject(parent, key, folders[parseInt(i.toString(), 10)]);\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n if (!isNullOrUndefined(id)) {\n parent.pathId.push(id);\n }\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 */\nexport function openSearchFolder(parent, data) {\n parent.originalPath = getFullPath(parent, data, parent.path);\n var root = getValue(parent.pathId[0], parent.feParent);\n var navData = parent.feParent[getValue('_fm_id', parent.itemData[0])];\n var isRoot = isNullOrUndefined(navData) || getValue('_fm_id', navData) === 'fe_tree';\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n var searchData = getObject(parent, key, isFileSystemData(parent) ? getValue('id', data) : getValue('name', data));\n if (isNullOrUndefined(searchData)) {\n if (!isRoot) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n }\n else {\n setNextPath(parent, parent.path);\n return;\n }\n }\n else {\n var id = getValue('_fm_id', searchData);\n parent.setProperties({ path: parent.originalPath }, true);\n parent.pathId.push(id);\n parent.itemData = [searchData];\n parent.pathNames.push(getValue('name', searchData));\n }\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n if (parent.activeModule === 'navigationpane' && !parent.selectedNodes[0].includes('/')) {\n parent.targetPath = getTargetPath(parent, parent.actionRecords[0]);\n }\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 */\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 name_1 = parent.dragData[i] ? parent.dragData[i].name : null;\n var srcData = isFileSystemData(parent) ? name_1 : 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 && !isNullOrUndefined(parent.ajaxSettings.url) ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath) && isFileSystemData(parent) && fPath !== '' && fPath !== '\\\\') {\n fPath = '\\\\' + args.cwd.parentId + '\\\\';\n }\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return '/';\n }\n return fPath.replace(/\\\\/g, '/').replace(/^.*?(?=\\/)/, '') + filePath;\n }\n else {\n return isFileSystemData(parent) ? filePath : 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 parent.trigger('success', { action: operation, result: result });\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}\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 */\nexport function getDuplicateData(parent, name) {\n var data = null;\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Remove item class handler\n *\n * @param {Element} scrollParent - specifies the scrolling target.\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} nodeClass - specifies the node class.\n * @param {number} clientY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the target element.\n * @returns {void}\n * @private\n */\nexport function scrollHandler(scrollParent, parent, nodeClass, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select('.' + nodeClass, scrollParent);\n if ((clientY >= (elementData.top + scrollParent.clientHeight - 30)) && !isNullOrUndefined(node)) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, position);\n }\n if (!isNullOrUndefined(node) && (clientY <= (elementData.top + 30))) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, -position);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n var scrollParent;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n scrollParent = parent.navigationpaneModule.treeObj.element.parentElement;\n scrollHandler(scrollParent, parent, 'e-level-2', args.event.y);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n scrollParent = parent.detailsviewModule.gridObj.element.querySelector('.e-content');\n scrollHandler(scrollParent, parent, 'e-row', args.event.y);\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n scrollParent = parent.largeiconsviewModule.element.firstElementChild;\n scrollHandler(scrollParent, parent, 'e-large-icon', args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\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 */\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 */\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 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 */\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 */\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 */\nexport function createDeniedDialog(parent, data, action) {\n var permission = getValue('permission', data);\n var message = getValue('message', permission);\n var restriction = getValue('uploadContentFilter', permission) === 1 ? 'Folder Upload' : 'File Upload';\n if (message === '') {\n if (!isNOU(permission) && getValue('upload', permission) && getValue('uploadContentFilter', permission) === 1) {\n message = getLocaleText(parent, 'FolderUpload-Access-Message').replace('{0}', getValue('name', data)).replace('{1}', restriction);\n }\n else if (!isNOU(permission) && getValue('upload', permission) && getValue('uploadContentFilter', permission) === 2) {\n message = getLocaleText(parent, 'FileUpload-Access-Message').replace('{0}', getValue('name', data)).replace('{1}', restriction);\n }\n else {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\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 */\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 */\nexport function hasReadAccess(data) {\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 */\nexport function hasEditAccess(data) {\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 */\nexport function hasContentAccess(data) {\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 */\nexport function hasUploadAccess(data) {\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 */\nexport function hasDownloadAccess(data) {\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 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 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/**\n * Close dialog popup handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function closePopup(parent) {\n if (!isNullOrUndefined(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n}\n/**\n * Get target path from item data.\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} itemData - specifies the item elements.\n * @returns {string} returns the path.\n * @private\n */\nexport function getTargetPath(parent, itemData) {\n if (parent.hasId && !isNOU(getValue('filterId', itemData))) {\n return getValue('filterId', itemData).replace(/\\\\/g, '/').replace(/^[^/]+\\//, '/');\n }\n else {\n return getValue('filterPath', itemData).replace(/\\\\/g, '/');\n }\n}\n/**\n * Access control handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} itemData - specifies the item elements.\n * @param {string} action - specifies the action.\n * @param {boolean} isPathPermision - specifies the path permission.\n * @returns {string} returns the path.\n * @private\n */\nexport function getAccessDetails(parent, itemData, action, isPathPermision) {\n var accessMessage = '';\n for (var i = 0; i < itemData.length; i++) {\n var permission = getValue('permission', itemData[i]);\n if (permission == null) {\n permission = undefined;\n }\n if (isPathPermision) {\n if (permission && (!getValue('read', permission) || !getValue('writeContents', permission))) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', 'writeContents');\n }\n }\n }\n else {\n var copyOrMovePermission = action === 'copy' ? getValue('copy', permission) : getValue('write', permission);\n if (permission && (!getValue('read', permission) || !copyOrMovePermission)) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', action);\n }\n }\n }\n if (accessMessage !== '') {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: '401',\n message: accessMessage,\n fileExists: null\n },\n files: null\n };\n break;\n }\n }\n return accessMessage;\n}\n","import { Ajax, Fetch, createElement, select, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails, getTargetPath } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\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 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 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 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 var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\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 var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\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 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 var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) {\n return !isNOU(item) && String(item.id) === String(id);\n });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n if (!isNOU(target.filterId)) {\n Object.assign(newItem, {\n filterId: target.filterId + target.id + '/'\n });\n }\n return newItem;\n}\n/**\n * Function to create an error response.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} message - specifies the error message.\n * @param {string} code - specifies the error code.\n * @param {Object[]} fileName - specifies the file name.\n * @returns {void}\n * @private\n */\nfunction createErrorObject(parent, message, code, fileName) {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: code,\n message: message,\n fileExists: fileName != null ? fileName : null\n },\n files: null\n };\n}\n/**\n * Function to trigger folder creation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerFolderCreation(parent, data, eventArgs) {\n var createEventArgs = {\n folderName: getValue('name', data),\n cancel: false,\n path: getValue('path', data),\n parentFolder: getValue('data', data)\n };\n parent.trigger('beforeFolderCreate', createEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.folderName)) {\n var data_1 = args.parentFolder[0];\n var newObject = createNewItem(data_1, data_1, args.folderName, false);\n parent.fileSystemData.push(newObject);\n }\n else {\n var message = 'A file or folder with the name ' + args.folderName + ' already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger delete operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerDeleteOperation(parent, data, eventArgs) {\n var deleteEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeDelete', deleteEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n args.itemData.forEach(function (itemData) {\n var index = findIndexById(parent, itemData.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n if (!itemData.isFile) {\n var subItems = parent.fileSystemData.filter(function (obj) { return obj.filterPath.includes(itemData.name); });\n subItems.forEach(function (subItem) {\n var index = findIndexById(parent, subItem.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n });\n }\n });\n }\n });\n}\n/**\n * Function to trigger rename operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerRenameOperation(parent, data, eventArgs) {\n var renameEventArgs = {\n cancel: false,\n newName: getValue('newName', data),\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeRename', renameEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.newName)) {\n var fileData = filterById(parent, args.itemData[0].id);\n var oldName = fileData.name;\n fileData.name = args.newName;\n updateChildrenFilterPath(parent, fileData.id, oldName, args.newName);\n parent.responseData.error = null;\n }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to update child item filter path.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent id.\n * @param {string} oldName - specifies the previous name.\n * @param {string} newName - specifies the new name.\n * @returns {void}\n * @private\n */\nfunction updateChildrenFilterPath(parent, parentId, oldName, newName) {\n parent.fileSystemData.forEach(function (item) {\n if (String(item.parentId) === String(parentId)) {\n var oldPath = item.filterPath;\n var newPath = oldPath.replace(oldName + '\\\\', newName + '\\\\');\n item.filterPath = newPath;\n updateChildrenFilterPath(parent, item.id, oldName, newName);\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target_1 = args.targetData;\n var getTargetFiles = filterByParent(parent, target_1.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target_1.hasChild) {\n target_1.hasChild = !currItem.isFile;\n var targetItem = parent.fileSystemData\n .filter(function (item) { return String(item.id) === String(target_1.id); });\n if (targetItem.length > 0) {\n targetItem[0].hasChild = target_1.hasChild;\n }\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentId) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target_1;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target_1 = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target_1.id;\n fileData.filterPath = target_1.id === 0 ? '\\\\' : target_1.filterPath + target_1.name + '\\\\';\n if (!isNOU(target_1.filterId)) {\n fileData.filterId = target_1.filterId + target_1.id + '/';\n }\n if (!currItem.isFile) {\n updateMovedItemChildren(parent, fileData);\n }\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\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 triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' || event === 'rename-end-parent'\n ? getValue('path', data) : parent.path;\n var pathArray = filePath.replace(/^\\/|\\/$/g, '').split('/');\n var idValue = event === 'rename-end-parent' || (event === 'path-changed' && getValue('data', data).length !== 0 && isNOU(parent.renamedItem))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n if (action === 'copy') {\n itemData = parent.pasteNodes.map(function (item) { return filterById(parent, item); });\n }\n else {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) || isMultipleFiles ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\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 performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\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 to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\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 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 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 }\n if (location_1.indexOf('\\\\') === -1) {\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function to move operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} itemData - specifies the data.\n * @returns {void}\n * @private\n */\nfunction updateMovedItemChildren(parent, itemData) {\n var childItems = filterByParent(parent, itemData.id);\n childItems.forEach(function (childItem) {\n childItem.filterPath = itemData.filterPath + itemData.name + '\\\\';\n if (!isNOU(itemData.filterId)) {\n childItem.filterId = itemData.filterId + itemData.id + '/';\n }\n if (!childItem.isFile) {\n updateMovedItemChildren(parent, childItem);\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(parent, 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 try {\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 (!isNOU(result.error) && 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 }\n catch (error) {\n handleCatchError(parent, error, '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 try {\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 catch (error) {\n handleCatchError(parent, error, 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 try {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = isFileSystemData(parent) ? result.files[result.files.length - 1] : result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var createEventArgs = {\n folderName: itemName,\n path: parent.path,\n parentFolder: parent.itemData\n };\n parent.trigger('folderCreate', createEventArgs);\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 catch (error) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'create');\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 * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result) {\n try {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n var renameEventArgs = {\n newName: parent.renamedItem.name,\n itemData: [parent.renamedItem],\n path: parent.path\n };\n parent.trigger('rename', renameEventArgs);\n if (parent.activeModule === 'navigationpane') {\n var pathObject = getPathObject(parent);\n var pathLevel = parent.pathId[parent.pathId.length - 1].split('_').length - 2;\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n var renamePath = getTargetPath(parent, parent.renamedItem);\n read(parent, events.renameEndParent, renamePath);\n if (!isNOU(pathObject) && parent.pathNames.length > 1 && pathLevel <= parent.pathNames.length - 1) {\n parent.pathNames[pathLevel] = parent.renameText;\n if (!parent.hasId) {\n parent.setProperties({ path: \"/\" + parent.pathNames.slice(1).join('/') + \"/\" }, true);\n }\n }\n parent.itemData = parent.navigationpaneModule.previousSelected.length > 0\n ? parent.navigationpaneModule.treeObj.getTreeData(parent.navigationpaneModule.previousSelected[0]) : parent.itemData;\n read(parent, events.pathChanged, parent.path);\n parent.itemData[0] = parent.renamedItem;\n parent.renamedItem = null;\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 catch (error) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'rename');\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 try {\n var moveorcopyEventArgs = {\n itemData: result.files,\n isCopy: operation === 'copy' ? true : false,\n path: path,\n targetData: parent.itemData[0],\n targetPath: parent.path\n };\n parent.trigger('move', moveorcopyEventArgs);\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 catch (error) {\n handleCatchError(parent, error, 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 try {\n var deleteEventArgs = {\n itemData: result.files,\n path: path\n };\n parent.trigger('delete', deleteEventArgs);\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 catch (error) {\n handleCatchError(parent, error, '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 try {\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 catch (error) {\n handleCatchError(parent, error, '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(parent, event, path, searchString, showHiddenItems, caseSensitive) {\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 try {\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 catch (error) {\n handleCatchError(parent, error, '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 var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var ajaxSettings = {\n url: downloadUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { data: data, cancel: false, useFormPost: true, ajaxSettings: ajaxSettings };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n if (downloadArgs.useFormPost) {\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 else {\n try {\n var contentDisposition_1;\n var fileName_1;\n var fetch_1 = new Fetch({\n url: getValue('url', downloadArgs.ajaxSettings),\n type: getValue('type', downloadArgs.ajaxSettings),\n contentType: getValue('contentType', downloadArgs.ajaxSettings),\n responseType: getValue('responseType', downloadArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', downloadArgs.ajaxSettings),\n onLoad: function (e) {\n contentDisposition_1 = e.headers.get('Content-Disposition');\n if (contentDisposition_1) {\n var filenameMatch = contentDisposition_1.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/);\n var extractedFilename = filenameMatch && filenameMatch[1];\n fileName_1 = extractedFilename ? extractedFilename.replace(/['\"]/g, '') : fileName_1;\n }\n else {\n fileName_1 = parent.itemData.length > 1 ? 'files.zip' : getValue('isFile', parent.itemData[0]) ? getValue('name', parent.itemData[0]) : getValue('name', parent.itemData[0]) + '.zip';\n }\n },\n onSuccess: function (e) {\n parent.trigger('success', downloadArgs);\n var blob = e;\n var blobUrl = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.href = blobUrl;\n link.download = fileName_1;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.downloadUrl\n }\n };\n createDialog(parent, 'Error', result);\n parent.trigger('failure', downloadArgs);\n }\n });\n fetch_1.send(JSON.stringify(downloadArgs.data));\n }\n catch (error) {\n handleCatchError(parent, error, 'download');\n }\n }\n }\n });\n}\n/**\n * Function for on catch handler in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {any} error - specifies the catch error.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction handleCatchError(parent, error, action) {\n var errorResult = {\n files: null,\n error: {\n message: error.message,\n fileExists: null\n }\n };\n onFailure(parent, errorResult, action);\n}\n/**\n * Function for trigger Fetch success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @returns {void}\n */\nexport function triggerFetchSuccess(parent, ajaxSettings) {\n parent.notify(events.afterRequest, { action: 'success' });\n if (ajaxSettings && typeof getValue('onSuccess', ajaxSettings) === 'function') {\n getValue('onSuccess', ajaxSettings)();\n }\n}\n/**\n * Function for trigger Fetch failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n */\nexport function triggerFetchFailure(parent, ajaxSettings, result) {\n parent.notify(events.afterRequest, { action: 'failure' });\n createDialog(parent, 'Error', result);\n if (typeof getValue('onFailure', ajaxSettings) === 'function') {\n getValue('onFailure', ajaxSettings)();\n }\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization, Fetch } 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, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass, getTargetPath } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details) {\n var options = getOptions(parent, text, e, details);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details) {\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 var index;\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 () {\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 () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index = val.name.indexOf('.') + 1;\n return (index === 0 && (!val.isFile)) ? 'Folder' : ((index !== 0) ? val.name.substr(index).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] === undefined) {\n strArr = details.name.split(',').map(function (val) {\n index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).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 () {\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/**\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 = '';\n if (parent.activeModule === 'navigationpane') {\n newPath = getTargetPath(parent, parent.itemData[0]);\n }\n else {\n newPath = parent.path;\n }\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 {BeforeImageLoadEventArgs} imageData - specifies the image eventargs.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageData) {\n var content = createElement('div', { className: 'e-image-wrap' });\n if (imageData.useImageAsUrl) {\n var image = createElement('img', { className: 'e-image', attrs: { src: imageData.imageUrl, alt: header } });\n content.appendChild(image);\n }\n else {\n var fetch_1 = new Fetch({\n url: getValue('url', imageData.ajaxSettings),\n type: getValue('type', imageData.ajaxSettings),\n contentType: getValue('contentType', imageData.ajaxSettings),\n responseType: getValue('responseType', imageData.ajaxSettings),\n beforeSend: getValue('beforeSend', imageData.ajaxSettings),\n onSuccess: function (e) {\n var blobUrl = URL.createObjectURL(e);\n var image = createElement('img', { className: 'e-image', attrs: { src: blobUrl, alt: header } });\n content.appendChild(image);\n triggerFetchSuccess(parent, imageData.ajaxSettings);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + getValue('url', imageData.ajaxSettings)\n }\n };\n triggerFetchFailure(parent, imageData.ajaxSettings, result);\n }\n });\n var data = getValue('data', imageData.ajaxSettings);\n fetch_1.send(data);\n }\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\n template: '<span class=\"e-fe-text\">${name}</span>',\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"sequentialUpload\", 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 __decorate([\n Property(0)\n ], UploadSettings.prototype, \"chunkSize\", 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, \"sortComparer\", 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_FOLDER = 'e-icons e-folder';\n/** @hidden */\nexport var ICON_FILE = 'e-icons e-file-format';\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable, Fetch } 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, DataUtil } 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, triggerFetchFailure, triggerFetchSuccess } 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, getLocaleText } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.imageEventArgsMap = new Map();\n this.imageUrlCache = new Map();\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', imageAttributes: '_fm_imageAttr', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n if (this.parent.largeIconsTemplate) {\n this.listObj.template = this.parent.largeIconsTemplate;\n this.listObj.templateID = this.parent.element.id + '_largeIconsTemplate';\n }\n this.items = [];\n this.items = this.renderList(args);\n if (this.parent.sortComparer && this.parent.sortBy !== 'None') {\n this.items = this.allItems = DataUtil.sort(this.items, this.parent.sortBy, this.comparer.bind(this));\n }\n else {\n this.items = this.allItems = getSortedData(this.parent, this.items);\n }\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0 && !isNOU(this.parent.virtualizationModule)) {\n this.parent.virtualizationModule.setUIVirtualization();\n }\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj, null, null, this.parent);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.parent.renderReactTemplates();\n if (this.imageEventArgsMap.size > 0) {\n this.loadImages();\n }\n this.listElements.setAttribute('aria-label', 'listbox');\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0 && !isNOU(this.parent.virtualizationModule)) {\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.loadImages = function () {\n var _this = this;\n var imageEle = this.parent.element.querySelectorAll('.e-list-img');\n imageEle.forEach(function (imgElement) {\n var imageKey = imgElement.getAttribute('data-image-key');\n if (!imageKey) {\n return;\n }\n if (_this.imageUrlCache.has(imageKey)) {\n imgElement.setAttribute('src', _this.imageUrlCache.get(imageKey));\n imgElement.classList.remove('image-blur');\n return;\n }\n var imageDetails = _this.imageEventArgsMap.get(imageKey);\n if (!imageDetails) {\n return;\n }\n var fetch = new Fetch({\n url: getValue('url', imageDetails.ajaxSettings),\n type: getValue('type', imageDetails.ajaxSettings),\n contentType: getValue('contentType', imageDetails.ajaxSettings),\n responseType: getValue('responseType', imageDetails.ajaxSettings),\n beforeSend: getValue('beforeSend', imageDetails.ajaxSettings),\n onSuccess: function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n _this.imageUrlCache.set(imageKey, blobUrl);\n imgElement.setAttribute('src', blobUrl);\n imgElement.classList.remove('image-blur');\n triggerFetchSuccess(_this.parent, imageDetails.ajaxSettings);\n },\n onFailure: function (response) {\n var result = {\n files: null,\n error: {\n code: response.status ? response.status.toString() : '404',\n message: getLocaleText(_this.parent, 'Network-Error') + ' ' + getValue('url', imageDetails.ajaxSettings),\n fileExists: null\n }\n };\n triggerFetchFailure(_this.parent, imageDetails.ajaxSettings, result);\n }\n });\n fetch.send(getValue('data', imageDetails.ajaxSettings));\n });\n };\n LargeIconsView.prototype.comparer = function (x, y) {\n if (this.parent.sortOrder === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return this.parent.sortComparer(x, y);\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: false,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.dragData.push(this.getItemObject(activeEle[parseInt(i.toString(), 10)]));\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 var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\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.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.largeIconsTemplate) {\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 if (txt.indexOf(type) !== -1) {\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n }\n this.renderCheckbox(args);\n }\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\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 imageData = getImageUrl(this.parent, items[i]);\n if (imageData.useImageAsUrl) {\n setValue('_fm_imageUrl', imageData.imageUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n var uniqueKey = \"img_\" + name_1 + \"_\" + i;\n this.imageEventArgsMap.set(uniqueKey, imageData);\n setValue('_fm_imageUrl', '', items[i]);\n setValue('_fm_imageAttr', { alt: name_1, class: 'e-list-img image-blur', 'data-image-key': uniqueKey }, items[i]);\n }\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem && this.parent.activeModule === 'largeiconsview') {\n this.clearSelect();\n this.addSelection(this.parent.renamedItem);\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 };\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 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 ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\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 '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 case 'showItemCheckBoxes':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n if (_this.parent.isDevice) {\n _this.tapCount = eve.tapCount;\n _this.tapEvent = eve;\n setTimeout(function () {\n if (_this.tapCount > 0) {\n _this.doTapAction(_this.tapEvent);\n }\n _this.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n _this.dblClickHandler(eve);\n }\n else {\n _this.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n _this.multiSelect = _this.parent.allowMultiSelection ? true : false;\n if (_this.parent.allowMultiSelection) {\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n _this.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 ctrlKey = this.parent.isMac ? e.metaKey : e.ctrlKey;\n var isMacRightClick = this.parent.isMac && e.ctrlKey && e.shiftKey;\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 || isMacRightClick) && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.addActive(item);\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (ctrlKey && e.shiftKey && !isMacRightClick) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey && !isMacRightClick) {\n if (!(e && ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n 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 imageData = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imageData);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n this.parent.isFile = getValue('isFile', this.getItemObject(item));\n };\n /* istanbul ignore next */\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 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 case 'back':\n this.parent.traverseBackward();\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 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 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 var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n };\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 var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null\n : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data\n : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n LargeIconsView.prototype.addSelection = function (data) {\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 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 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 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 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 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 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 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 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 BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('fileupload')) {\n this.renderFileFolderIcons(args, CLS.ICON_FILE, !this.parent.uploadObj.directoryUpload);\n }\n if (args.item.id === this.getMenuId('folderupload')) {\n this.renderFileFolderIcons(args, CLS.ICON_FOLDER, this.parent.uploadObj.directoryUpload);\n }\n };\n ContextMenu.prototype.renderFileFolderIcons = function (menuArgs, fileFolderIcon, isDirectory) {\n var iconSpan = createElement('span');\n var element = menuArgs.element;\n element.insertBefore(iconSpan, isDirectory ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', fileFolderIcon + ' ' + CLS.MENU_ICON);\n };\n ContextMenu.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: false,\n element: args.element,\n event: args.event,\n isFocused: args.isFocused,\n fileDetails: [this.menuItemData],\n items: args.items,\n parentItem: args.parentItem,\n menuType: this.menuType\n };\n this.parent.trigger('menuClose', eventArgs, function (menuCloseArgs) {\n if (menuCloseArgs.cancel) {\n args.cancel = menuCloseArgs.cancel;\n return;\n }\n });\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule === 'navigationpane') {\n this.parent.pathId.pop();\n var parentKey = [];\n var itemKeys = Object.keys(this.parent.feParent);\n for (var _i = 0, itemKeys_1 = itemKeys; _i < itemKeys_1.length; _i++) {\n var item = itemKeys_1[_i];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var itemData = getValue(item, this.parent.feParent);\n if (this.parent.pathNames.indexOf(itemData.name) !== -1) {\n parentKey.push(itemData._fm_id);\n }\n }\n this.parent.pathId.push(parentKey[parentKey.length - 1]);\n this.parent.navigationpaneModule.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n var selected = false;\n var uid;\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 }\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 }\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 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 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 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('aria-rowindex'), 10) - 1]);\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 if (!isNOU(uid)) {\n this.navUid = uid;\n }\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 else {\n var itemsToRemove = ['Delete', 'Rename', 'Cut', 'Copy'];\n for (var i = 0; i < this.disabledItems.length; i++) {\n var item = this.disabledItems[i];\n if (itemsToRemove.indexOf(item) !== -1) {\n this.disabledItems.splice(i, 1);\n i--;\n }\n }\n }\n /* istanbul ignore next */\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 if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n else {\n var pasteIndex = this.disabledItems.indexOf('Paste');\n if (pasteIndex !== -1) {\n this.disabledItems.splice(pasteIndex, 1);\n }\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 if (enable) {\n this.disabledItems = this.disabledItems.filter(function (item) { return items.indexOf(item) === -1; });\n }\n for (var i = 0; i < items.length; i++) {\n var validItem = this.checkValidItem(items[i]);\n if (validItem === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (validItem === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.navUid + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (!isNOU(selectedTreeNode) &&\n this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n else {\n var indexToRemove = this.disabledItems.indexOf('Open');\n if (indexToRemove !== -1) {\n this.disabledItems.splice(indexToRemove, 1);\n }\n }\n if (this.parent.selectedItems.length === 0) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n }\n else if (this.parent.activeModule !== 'navigationpane') {\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename', 'Paste');\n }\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 var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\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 else {\n this.disabledItems = this.disabledItems.filter(function (item) { return item !== 'SelectAll'; });\n }\n if (this.parent.selectedNodes.length === 0) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(this.currentElement)) {\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 }\n return -1;\n };\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\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 var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'fileupload' || itemText === 'folderupload') {\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 if (itemText !== 'cut' && itemText !== 'copy') {\n _this.isMenuItemClicked = true;\n }\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 === 'navigationpane') {\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n _this.parent.folderPath = _this.parent.path;\n }\n else {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'name':\n case 'size':\n case 'date':\n case 'ascending':\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 case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n case 'fileupload':\n case 'folderupload':\n _this.parent.setProperties({ uploadSettings: { directoryUpload: itemText === 'fileupload' ? false : true } });\n _this.parent.dataBind();\n uploadItem(_this.parent);\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD,\n items: [\n {\n id: this.getMenuId('folderupload'), text: getLocaleText(this.parent, 'Upload-Folder'),\n iconCss: !this.parent.uploadObj.directoryUpload ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('fileupload'), text: getLocaleText(this.parent, 'Upload-File'),\n iconCss: this.parent.uploadObj.directoryUpload ? null : CLS.TB_OPTION_TICK\n }\n ]\n };\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.split(' ').join('').toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\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 'Upload-File': 'File',\n 'Upload-Folder': 'Folder',\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 'FolderUpload-Access-Message': '{0} is not accessible. you need permission to perform the {1} action.',\n 'FileUpload-Access-Message': '{0} is not accessible. you need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, detach, selectAll, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem, closePopup } 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 _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.existingFileCount = 0;\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 _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\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 _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 _this.dragSelectedItems = [];\n _this.onScrollHandler = function () {\n if (!isNOU(_this.contextmenuModule) && !isNOU(_this.contextmenuModule.contextMenu)) {\n _this.contextmenuModule.contextMenu.close();\n }\n };\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 name: 'Toolbar'\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this],\n name: 'NavigationPane'\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this],\n name: 'DetailsView'\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this],\n name: 'ContextMenu'\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this],\n name: 'Virtualization'\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 if (this.fileView === 'Details') {\n this.largeiconsviewModule.element.classList.add(CLS.DISPLAY_NONE);\n }\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 chunkSize: this.uploadSettings.chunkSize,\n retryCount: 0\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n chunkUploading: this.onChunkUploading.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 sequentialUpload: this.uploadSettings.sequentialUpload,\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.onChunkUploading = 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 }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\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 if (this.uploadSettings.chunkSize === 0) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\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 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 var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n if (this.allowOrDenyUpload(args, details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n FileManager.prototype.allowOrDenyUpload = function (args, uploadDetails) {\n var permission = getValue('permission', uploadDetails);\n if (isNOU(args) || isNOU(permission) || isNOU(getValue('uploadContentFilter', permission))) {\n return false;\n }\n var hasFolder = args.filesData.some(function (f) {\n var name = !isNOU(f.name) ? f.name : '';\n return name.includes('/') || name.includes('\\\\');\n });\n var hasFile = args.filesData.some(function (f) {\n var name = !isNOU(f.name) ? f.name : '';\n return !(name.includes('/') || name.includes('\\\\'));\n });\n if (hasFolder && getValue('uploadContentFilter', permission) === 1) {\n return true;\n }\n if (hasFile && getValue('uploadContentFilter', permission) === 2) {\n return true;\n }\n return false;\n };\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 FileManager.prototype.onChunkUploadComplete = function (files) {\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n var uploadFile = !isNullOrUndefined(files) ? getValue('file', files).name : '';\n if (uploadFile === this.retryArgs[i].file.name) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadSuccess = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\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 FileManager.prototype.onUploadFailure = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') !== -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireSelectOnDragEvent = function (isBind) {\n if (isNOU(this.view)) {\n return;\n }\n if (isBind) {\n this.viewElem = this.view === 'LargeIcons' ? this.largeiconsviewModule.element : this.element.querySelector('.e-gridcontent');\n }\n if (isBind) {\n if (this.allowMultiSelection) {\n this.on(events.layoutChange, this.onLayoutChange, this);\n this.on(events.selectionChanged, this.onLayoutChange, this);\n }\n }\n else {\n this.off(events.layoutChange, this.onLayoutChange);\n this.off(events.selectionChanged, this.onLayoutChange);\n }\n if (this.viewElem) {\n if (isBind && this.allowMultiSelection) {\n EventHandler.add(this.viewElem, 'mousedown', this.onDragStart, this);\n }\n else {\n EventHandler.remove(this.viewElem, 'mousedown', this.onDragStart);\n }\n }\n };\n FileManager.prototype.wireEvents = function () {\n if (this.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n if (this.contextMenuSettings.visible) {\n this.element.addEventListener('scroll', this.onScrollHandler, true);\n }\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 this.wireSelectOnDragEvent(false);\n EventHandler.remove(window, 'resize', this.resizeHandler);\n if (this.contextMenuSettings.visible) {\n this.element.removeEventListener('scroll', this.onScrollHandler, true);\n }\n this.keyboardModule.destroy();\n };\n FileManager.prototype.onDragStart = function (event) {\n if (this.viewElem) {\n if (this.allowDragAndDrop) {\n var targetElement = closest(event.target, this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-fe-text');\n if (targetElement) {\n return;\n }\n }\n event.preventDefault();\n this.dragX = event.pageX;\n this.dragY = event.pageY;\n if (!this.dragSelectElement) {\n this.dragSelectElement = createElement('div', {\n id: this.element.id + '_drag',\n className: 'e-filemanager e-drag-select',\n styles: 'left: ' + this.dragX + 'px;top: ' + this.dragY + 'px;'\n });\n document.body.append(this.dragSelectElement);\n }\n EventHandler.add(document, 'mouseup', this.onDragStop, this);\n EventHandler.add(this.viewElem, 'mousemove', this.onDrag, this);\n EventHandler.add(this.dragSelectElement, 'mousemove', this.onDrag, this);\n }\n };\n FileManager.prototype.onDrag = function (event) {\n event.stopPropagation();\n if (this.dragSelectElement) {\n var diffX = event.pageX - this.dragX;\n var diffY = event.pageY - this.dragY;\n setStyleAttribute(this.dragSelectElement, {\n 'left': diffX < 0 ? this.dragX + diffX + 'px' : this.dragX + 'px', 'top': diffY < 0 ? this.dragY + diffY + 'px' : this.dragY + 'px',\n 'height': Math.abs(diffY) + 'px', 'width': Math.abs(diffX) + 'px'\n });\n this.selectItems();\n }\n else {\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n };\n FileManager.prototype.onDragStop = function () {\n if (this.viewElem) {\n EventHandler.remove(document, 'mouseup', this.onDragStop);\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n if (this.dragSelectElement) {\n EventHandler.remove(this.dragSelectElement, 'mousemove', this.onDrag);\n if (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0) {\n this.setProperties({ selectedItems: this.dragSelectedItems });\n }\n this.dragSelectedItems = [];\n detach(this.dragSelectElement);\n this.dragSelectElement = null;\n }\n };\n FileManager.prototype.selectItems = function () {\n var dragRect = this.dragSelectElement.getBoundingClientRect();\n if (dragRect.height > 0 && dragRect.width > 0) {\n this.dragSelectedItems = [];\n removeClass(selectAll('.e-active', this.viewElem), ['e-active', 'e-focus']);\n removeClass(selectAll('.e-check', this.viewElem), ['e-check']);\n }\n var allItems = selectAll(this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-row', this.viewElem);\n for (var _i = 0, allItems_1 = allItems; _i < allItems_1.length; _i++) {\n var item = allItems_1[_i];\n var itemRect = item.getBoundingClientRect();\n if (!(dragRect.right < itemRect.left || dragRect.left > itemRect.right\n || dragRect.bottom < itemRect.top || dragRect.top > itemRect.bottom)\n && (dragRect.height > 0 && dragRect.width > 0)) {\n if (this.viewElem.classList.contains('e-large-icons')) {\n item.classList.add('e-active');\n this.dragSelectedItems.push(item.getAttribute('title'));\n }\n else {\n addClass(selectAll('.e-rowcell', item), ['e-active']);\n this.dragSelectedItems.push(item.querySelector('.e-drag-text').textContent);\n }\n if (this.showItemCheckBoxes) {\n if (item.querySelector('.e-frame')) {\n item.querySelector('.e-frame').classList.add('e-check');\n }\n }\n }\n }\n };\n FileManager.prototype.onLayoutChange = function () {\n if (this.enableRangeSelection) {\n this.unWireEvents();\n this.wireEvents();\n }\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 FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var height;\n var requiresRefresh = false;\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 'showItemCheckBoxes':\n this.showItemCheckBoxes = newProp.showItemCheckBoxes;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableVirtualization':\n this.enableVirtualization = newProp.enableVirtualization;\n requiresRefresh = true;\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 'enableRangeSelection':\n this.wireSelectOnDragEvent(false);\n if (newProp.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n break;\n case 'enableRtl':\n this.enableRtl = newProp.enableRtl;\n requiresRefresh = true;\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n requiresRefresh = true;\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.oldPath = oldProp.path;\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n if (this.view === 'Details') {\n var columns = this.detailsViewSettings.columns;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.sortBy; }) !== -1;\n if (!isValidSortField) {\n return;\n }\n refresh(this);\n this.notify(events.sortByChange, {});\n this.notify(events.sortColumn, {});\n }\n else {\n refresh(this);\n this.notify(events.sortByChange, {});\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 case 'fileSystemData':\n this.fileSystemData = newProp.fileSystemData;\n requiresRefresh = true;\n break;\n case 'navigationPaneTemplate':\n this.navigationPaneTemplate = newProp.navigationPaneTemplate;\n requiresRefresh = true;\n break;\n case 'largeIconsTemplate':\n this.largeIconsTemplate = newProp.largeIconsTemplate;\n requiresRefresh = true;\n break;\n }\n }\n if (requiresRefresh) {\n this.refresh();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n this.viewElem = null;\n this.dragSelectElement = null;\n this.dragSelectedItems = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Enables the specified menu 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.enableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.enableItems(items, true, 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) && !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 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 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 * Specifies the method that must be invoked to traverse the path backwards in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.traverseBackward = function () {\n if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {\n this.pathId.pop();\n this.pathNames.pop();\n var newPath = this.pathNames.slice(1).join('/');\n newPath = newPath === '' ? '/' : '/' + newPath + '/';\n this.setProperties({ path: newPath }, true);\n read(this, events.pathChanged, this.path);\n var treeNodeId = this.pathId[this.pathId.length - 1];\n this.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\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 var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the method which must be invoked to programmatically close the dialog popup in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.closeDialog = function () {\n closePopup(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([])\n ], FileManager.prototype, \"fileSystemData\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"navigationPaneTemplate\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"largeIconsTemplate\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableRangeSelection\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeFolderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"folderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDelete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"delete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeRename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"rename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeMove\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"move\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"search\", 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, \"menuClose\", 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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n 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 var _this = this;\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_1 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan_1 = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: 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 beforeItemRender: function (args) {\n var tickIcon = args.item.iconCss;\n var viewText = args.item.text === getLocaleText(_this.parent, 'View-LargeIcons');\n var iconClass = tickIcon ? ' e-menu-icon ' + tickIcon : '';\n args.element.innerHTML = '<span class=\"' + iconClass + '\"></span>' + (viewText ? largeIconSpan_1 : gridSpan_1) + args.item.text;\n var span = args.element.firstChild;\n if (span && span.className === '') {\n args.element.removeChild(span);\n }\n }\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = Object.assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n if (this.itemList.length !== 0 && this.largeIconInstance.element.querySelector('.' + CLS.EMPTY)) {\n this.largeIconInstance.element.removeChild(this.largeIconInstance.element.querySelector('.' + CLS.EMPTY));\n }\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n *\n * @returns {void}\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 *\n * @param {number} dataSourceLength The length of the data source.\n * @returns {number} 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 =\n Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) /\n (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount *\n (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 || itemCount === 0) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n *\n * @param {boolean} destroy - Set `true` to unwire the scroll event.\n * @returns {void}\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 * @returns {void}\n * @private\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.itemCount = this.itemCount !== this.largeIconInstance.itemList.length ?\n this.largeIconInstance.itemList.length : this.itemCount;\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 *\n * @param {number} startingHeight The starting height from which to calculate the scroll position.\n * @returns {number} The current scroll position.\n * @private\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 *\n * @param {number} listDiff The number of rows to update.\n * @param {boolean} isScrollingDown If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\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 *\n * @param {boolean} isScrollingDown - If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\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 * @returns {void}\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","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { 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, isFileSystemData } 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 // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = [];\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies 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 var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\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: __assign({ dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name', hasChildren: 'hasChild' }, (isNOU(this.parent.navigationPaneTemplate) && { iconCss: '_fm_icon' }), { htmlAttributes: '_fm_htmlAttr', tooltip: 'name' }),\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 nodeTemplate: this.parent.navigationPaneTemplate\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 && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW + ',.' + CLS.TEXT_CONTENT,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW) && !dragTarget.classList.contains(CLS.TEXT_CONTENT)) {\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 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, this.parent);\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 if (this.parent && this.parent.portals && this.treeObj && this.treeObj.portals) {\n for (var i = 0; i < this.treeObj.portals.length; i++) {\n if (this.parent.portals.indexOf(this.treeObj.portals[i]) === -1) {\n this.parent.portals.push(this.treeObj.portals[i]);\n }\n }\n if (this.parent.isReact) {\n this.parent.renderReactTemplates();\n }\n }\n };\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n var directories = getDirectories(files);\n var targetDirectory = this.getTreeData(target);\n if (directories.length > 0 && targetDirectory.length > 0 &&\n (directories[0].filterPath == null ||\n isNOU(targetDirectory[0])\n && targetDirectory[0].filterPath == null\n || directories[0].filterPath !==\n targetDirectory[0].filterPath)) {\n var length_1 = 0;\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line camelcase\n folders[parseInt(length_1.toString(), 10)]._fm_icon = 'e-fe-folder';\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick &&\n !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked || this.isPathDragged) {\n this.isSameNodeClicked = false;\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.isPathDragged = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.setProperties({ selectedNodes: [node.getAttribute('data-uid')] });\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node, this.parent);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\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 && this.isSameNodeClicked) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node, this.parent);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\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 this.isNodeExpandCalled = true;\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? nodeData[0].name : id;\n var path = getPath(args.node, newText, isId, this.parent);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n }\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 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], true);\n }\n this.expandNodeTarget = '';\n }\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.setProperties({ selectedNodes: [sleId] });\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.addChild(args.files, id, false);\n this.treeObj.setProperties({ 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.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\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 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 = this.previousSelected.length > 0 && this.treeObj.getTreeData(this.previousSelected[0]).length !== 0\n ? this.previousSelected[0] : getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n this.updateItemData();\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 var data = this.treeObj.getTreeData();\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 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, this.parent.path);\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.setProperties({ selectedNodes: [e.selectedNode] });\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n if (isFileSystemData(this.parent)) {\n this.moveNames = [];\n var obj = this.parent.dragData;\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 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 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 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 NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\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 var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n 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 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 (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\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 var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n if (!obj || !Array.isArray(obj)) {\n return;\n }\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 var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\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 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 NavigationPane.prototype.getTreeData = function (args) {\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 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 node = select('[data-uid=\"' + this.parent.pathId[this.parent.pathId.length - 1] + '\"]', this.treeObj.element);\n updatePath(node, this.parent.itemData[0], this.parent);\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend, SanitizeHtmlHelper } 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/* eslint-disable @typescript-eslint/no-explicit-any */\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.isMultiSelect = false;\n this.pasteOperation = false;\n this.uploadOperation = 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 back: 'backspace'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n var _this = this;\n if (this.parent.enablePersistence) {\n var gridPersistenceValue = window.localStorage.getItem('grid' + this.parent.element.id + '_grid');\n if (!isNOU(gridPersistenceValue)) {\n var model = JSON.parse(gridPersistenceValue);\n if (!isNOU(model) && Object.keys(model).length > 0 && 'sortSettings' in model) {\n delete model.sortSettings;\n window.localStorage.setItem('grid' + this.parent.element.id + '_grid', JSON.stringify(model));\n }\n }\n }\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.parent.sortBy; }) !== -1;\n if (this.parent.isMobile || !isValidSortField) {\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.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 load: function () {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n if (this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization && this.parent.enablePersistence) {\n this.isLoaded = true;\n }\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n if (this.parent.portals && this.parent.navigationpaneModule &&\n this.parent.navigationpaneModule.treeObj && this.parent.navigationpaneModule.treeObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.navigationpaneModule.treeObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {number} - 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 var enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return \"<div class=\\\"e-fe-text\\\">\" + name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div><span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n var _loop_1 = function (i, len) {\n columns[i].headerText = getLocaleText(this_1.parent, columns[i].headerText);\n if (columns[i].field === 'name' && !isNOU(columns[i].template) && !(typeof columns[i].template === 'function')) {\n var template_1 = columns[i].template;\n columns[i].template = initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return template_1.replace(/\\${name}/g, name);\n });\n }\n };\n var this_1 = this;\n for (var i = 0, len = columns.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '70' : '56');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n if (this.parent.enableRangeSelection) {\n var HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };\n columns.push(HiddenName);\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 text = getValue('name', args.data);\n var textEle = args.row.querySelector('[title= \"' + text + '\"]');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n if (name_1.indexOf(type) !== -1) {\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n 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 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 var _this = this;\n showSpinner(this.parent.element);\n var nameColumn = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === _this.parent.sortBy; });\n if (nameColumn && !('sortComparer' in nameColumn) || this.parent.sortOrder === 'None') {\n var items = getSortedData(this.parent, (this.parent.enableVirtualization)\n ? args.result\n : 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.enableVirtualization) || this.isLoaded) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true && (!isNullOrUndefined(this.gridObj.getDataRows()) && this.gridObj.getDataRows().length > 0)) {\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 && this.parent.selectedItems.length === 0) {\n this.gridObj.clearSelection();\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 if (this.parent.sortOrder === 'None' && !isNOU(this.gridObj.element)) {\n var sortIconElement = this.gridObj.element.querySelector('.e-ascending, .e-descending');\n if (sortIconElement && sortIconElement.classList) {\n sortIconElement.classList.remove('e-icon-ascending', 'e-ascending', 'e-icon-descending', 'e-descending');\n }\n }\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && !this.parent.hasId && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n DetailsView.prototype.addSelection = function (data) {\n var items = this.gridObj.getCurrentViewRecords();\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 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 this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showItemCheckBoxes':\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 var pathField = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === 'filterPath'; });\n if ((this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) ||\n (!isNullOrUndefined(pathField) && !isNullOrUndefined(pathField.hideAtMedia) && pathField.hideAtMedia !== '')) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.wireClickEvent(true);\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 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 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 var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\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 imageData = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imageData);\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 if (this.gridObj == null) {\n return;\n }\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n var filterPathInSettings = this.parent.detailsViewSettings.columns.some(function (col) { return col.field === 'filterPath'; });\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath') && !filterPathInSettings) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n 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 DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n 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.querySelector('colgroup');\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].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else {\n gridHeaderColGroup.children[i].style.width = '180px';\n gridContentColGroup.children[i].style.width = '180px';\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && isNullOrUndefined(this.dragObj)) {\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\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 var info = null;\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 ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n if (!this.isMultiSelect) {\n this.isMultiSelect = true;\n if ((args.isShiftPressed || args.isCtrlPressed) && !this.parent.allowMultiSelection && (args.target && args.target.parentElement && !args.target.parentElement.classList.contains('e-checkbox-wrapper'))) {\n args.cancel = true;\n var rowIndex = (args && args.rowIndexes)\n ? args.rowIndexes[args.rowIndexes.length - 1]\n : args.rowIndex;\n this.gridObj.selectRow(rowIndex);\n }\n this.isMultiSelect = false;\n }\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 if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\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 var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n 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 var item = this.gridObj.getRowByIndex(args.rowIndex);\n if (!isNOU(item)) {\n item.removeAttribute('tabindex');\n }\n }\n else 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 if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').removeAttribute('tabindex');\n }\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 EventHandler.add(this.parent.element, 'focusout', this.onBlur, 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 EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\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 _this.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (_this.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', _this.parent.allowMultiSelection, _this.gridObj.selectionModule);\n addClass([_this.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 = _this.gridObj.getRows().indexOf(row);\n _this.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.onBlur = function (e) {\n if ((e.relatedTarget !== null && closest(e.relatedTarget, '.e-grid') !== e.relatedTarget)) {\n return;\n }\n if (!isNOU(this.gridObj.element)) {\n var thElements = this.gridObj.element.querySelectorAll('th');\n for (var i = 0; i < thElements.length; i++) {\n if (thElements[i].classList.contains('e-focus')) {\n this.addFocus(null);\n }\n }\n }\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('aria-rowindex'), 10) - 1 : null;\n };\n /* istanbul ignore next */\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 /* istanbul ignore next */\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1 && this.gridObj.allowSorting === true) {\n if (!e.target.classList.contains('e-fe-grid-icon')) {\n var direction = !e.target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n var currentField = this.gridObj.getColumnByUid(e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid')).field;\n this.gridObj.sortColumn(currentField, direction);\n if (!isNOU(this.getFocusedItem().nextSibling)) {\n this.getFocusedItem().nextSibling.setAttribute('tabindex', '0');\n }\n }\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\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 {\n this.addHeaderFocus(e);\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 case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\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 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 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 var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\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 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 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 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 (e) {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus;\n if (!isNOU(e.target) && e.target.classList.contains('e-defaultcursor')) {\n this.addFocus(0);\n nameFocus = e.target.nextElementSibling;\n }\n else if (!isNOU(this.gridObj.element.querySelector('.e-focus')) && (this.gridObj.element.querySelector('.e-focus').tagName === 'TH')) {\n nameFocus = this.gridObj.element.querySelector('.e-focus').nextElementSibling;\n this.addFocus(0);\n }\n else {\n nameFocus = select('th.e-fe-grid-icon', this.element);\n }\n if (!isNOU(nameFocus)) {\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 };\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 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 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 DetailsView.prototype.getRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\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 var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\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 var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\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 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 var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["sortComparer","reference","comparer","referenceIsFile","test","comparerIsFile","referenceParts","comparerParts","replace","_","$1","$2","push","Infinity","length","referencePart","shift","comparerPart","comparisonResult","localeCompare","updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","ids","names","isId","el","parentNode","matches","CLS.LIST_ITEM","navigationpaneModule","treeObj","getTreeData","parentText","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","parseInt","toString","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","getAllChildItems","parentId","children","fileSystemData","filter","item","String","allChildren","slice","forEach","child","childId","concat","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","isFileSystemData","itemData","read","events.layoutChange","events.search","searchSettings","filterType","currData","filteredData","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","responseData","error","Search","showHiddenItems","getPathObject","caseSensitive","hiddenItems","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","imgUrl","eventArgs_1","fileDetails","imageUrl","useImageAsUrl","trigger","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","Date","getTime","eventArgs","type","contentType","responseType","JSON","stringify","onSuccess","onFailure","beforeSend","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","isNullOrUndefined","group","sortBy","lists","getObject","feFiles","createEmptyElement","top","layoutElement","select","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","innerHTML","getLocaleText","uploadObj","dropArea","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","createdDate","modifiedDate","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","navData","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","includes","getTargetPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","name_1","dragData","srcData","dragNodes","tempTarget","dropHandler","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","permission","restriction","getAccessClass","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","isFileExists","some","findIndexById","findIndex","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","filterId","createErrorObject","triggerFolderCreation","createEventArgs","folderName","parentFolder","data_1","newObject","triggerDeleteOperation","deleteEventArgs","index","splice","obj","subItem","triggerRenameOperation","renameEventArgs","fileData","oldName","updateChildrenFilterPath","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","target_1","getTargetFiles","currItem","targetItem","subItems","pathArray","updateMovedItemChildren","triggerSearchOperation","searchEventArgs","searchResults","searchText","triggerClientEvents","fn","mode","dataType","beforeSendArgs","events.beforeRequest","idValue","renamedItem","isFileOperation","map","isMultipleFiles","itemNames","totalSize","getSize","reduce","accumulator","currentObject","location","multipleFiles","created","modified","performReadOperation","Ajax","result_1","triggerAjaxFailure","parse","send","toFixed","events.afterRequest","rootAliasName","rootName","location_1","RegExp","match","events.searchTextChange","copiedItems","childItem","events.selectionChanged","pop","handleCatchError","visible","nextElementSibling","createdItem","events.createEnd","Array","isArray","pathObject","pathLevel","renamePath","events.renameEndParent","renameText","previousSelected","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","contentDisposition_1","fileName_1","Fetch","onLoad","e","headers","get","filenameMatch","extractedFilename","blob","blobUrl","URL","createObjectURL","link","href","body","status","triggerFetchSuccess","triggerFetchFailure","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","replaceItems","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","onDeleteSubmit","Internationalization","formatDate","format","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","textContent","which","charCode","createImageDialog","imageData","image","src","alt","fetch_1","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","template","customAttributes","class","initializeCSPTemplate","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","imageEventArgsMap","Map","imageUrlCache","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","imageAttributes","htmlAttributes","itemCreated","onItemCreated","largeIconsTemplate","templateID","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","renderReactTemplates","loadImages","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","_this","imgElement","imageKey","has","imageDetails","set","response","x","z","ondragstart","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","uniqueKey","data-image-key","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","clickObj","Touch","tap","eve","isDevice","tapEvent","doTapAction","originalEvent","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","metaKey","isMacRightClick","cList","addActive","CLS.CHECK","triggerSelection","startIndex","endIndex","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","traverseBackward","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","getPropertyValue","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","renderFileFolderIcons","directoryUpload","menuArgs","fileFolderIcon","isDirectory","isFocused","parentItem","menuType","menuCloseArgs","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","navUid","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","itemsToRemove","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","enable","isUniqueId","validItem","checkValidItem","isTree","getItemData","contextMenuSettings","folder","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","uploadSettings","separator","CLS.TB_OPTION_TICK","CLS.ICON_CUT","CLS.TB_OPTION_DOT","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","Upload-File","Upload-Folder","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","FolderUpload-Access-Message","FileUpload-Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","onScrollHandler","contextmenuModule","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","adjustHeight","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","splitterAdjust","bar","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","chunkSize","retryCount","uploading","onUploading","chunkUploading","onChunkUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","minFileSize","maxFileSize","allowedExtensions","sequentialUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","allowOrDenyUpload","uploadDetails","hasFolder","f","hasFile","autoClose","onChunkUploadComplete","statusText","onInitialEnd","removeEventListeners","wireSelectOnDragEvent","isBind","viewElem","onDragStart","enableRangeSelection","dragX","pageX","dragY","pageY","dragSelectElement","styles","append","onDragStop","onDrag","stopPropagation","diffX","diffY","setStyleAttribute","Math","abs","dragRect","allItems_1","itemRect","right","bottom","setPath","oldProp","requiresRefresh","ajaxSettingSetModel","localeSetModelOption","col","navigationPaneTemplate","refreshing","CLS.RTL","toolbarModule","disableToolbarItems","enableToolbarItems","enableMenuItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","closeDialog","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","tickIcon","viewText","iconClass","firstChild","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","mergedItems","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","__assign","t","s","n","NavigationPane","removeNodes","moveNames","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","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","nodeTemplate","getDragPath","getDropPath","nodeData","isReact","addChild","prevent","directories","targetDirectory","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","currFiles","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","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","isMultiSelect","Grid","Resize","Sort","VirtualScroll","enablePersistence","gridPersistenceValue","localStorage","getItem","model","sortSettings","setItem","checkNameWidth","getColumns","isValidSortField","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","reactTemplateRender","emptyArgs","pane","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","HiddenName","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","intl","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","getDataRows","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","sortIconElement","gridRecords","getCurrentViewRecords","sRecords","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","filterPathInSettings","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","isShiftPressed","isCtrlPressed","rowIndexes","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","relatedTarget","thElements","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","currentField","getColumnByUid","nextSibling","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tagName","check","getRecords","hasFilter","name_4","dRecords","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-filemanager.min.js","sources":["../../src/file-manager/common/utility.js","../../src/file-manager/common/operations.js","../../src/file-manager/pop-up/dialog.js","../../src/file-manager/models/ajax-settings.js","../../src/file-manager/models/toolbar-settings.js","../../src/file-manager/models/search-settings.js","../../src/file-manager/models/details-view-settings.js","../../src/file-manager/models/contextMenu-settings.js","../../src/file-manager/models/navigation-pane-settings.js","../../src/file-manager/models/upload-settings.js","../../src/file-manager/models/column.js","../../src/file-manager/base/classes.js","../../src/file-manager/base/constant.js","../../src/file-manager/layout/large-icons-view.js","../../src/file-manager/actions/breadcrumb-bar.js","../../src/file-manager/pop-up/context-menu.js","../../src/file-manager/models/default-locale.js","../../src/file-manager/base/file-manager.js","../../src/file-manager/actions/toolbar.js","../../src/file-manager/actions/virtualization.js","../../src/file-manager/layout/navigation-pane.js","../../src/file-manager/layout/details-view.js","../../src/global.js"],"sourcesContent":["import * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { read, paste, Search, filter, Download, Delete, isFileSystemData } from '../common/operations';\nimport { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, detach } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createDialog } from '../pop-up/dialog';\n/**\n * Utility function to compare two strings in a way similar to Windows Explorer.\n * Files and folders are sorted separately, with folders coming before files.\n *\n * @param {string} reference - The first string to compare. This could be a file or folder name.\n * @param {string} comparer - The second string to compare. This could be a file or folder name.\n * @returns {number} - A negative number if `reference` should come before `comparer`, a positive number if `comparer` should come before `reference`, and 0 if they are considered equal.\n */\nexport function sortComparer(reference, comparer) {\n // Check if reference and comparer are files or folders\n var referenceIsFile = /\\.\\S+/.test(reference);\n var comparerIsFile = /\\.\\S+/.test(comparer);\n // If one is a file and the other is a folder, the folder should come first\n if (referenceIsFile && !comparerIsFile) {\n return 1;\n }\n if (!referenceIsFile && comparerIsFile) {\n return -1;\n }\n var referenceParts = [];\n var comparerParts = [];\n (reference + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { referenceParts.push([$1 || Infinity, $2 || '']); return ''; });\n (comparer + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { comparerParts.push([$1 || Infinity, $2 || '']); return ''; });\n // Compare each part of reference and comparer\n while (referenceParts.length && comparerParts.length) {\n var referencePart = referenceParts.shift();\n var comparerPart = comparerParts.shift();\n if (referencePart && comparerPart) {\n var comparisonResult = referencePart[0] - comparerPart[0] ||\n referencePart[1].localeCompare(comparerPart[1]);\n if (comparisonResult) {\n return comparisonResult;\n }\n }\n }\n return referenceParts.length - comparerParts.length;\n}\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 */\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, instance) }, true);\n instance.pathId = getPathId(node, instance);\n instance.pathNames = getPathNames(node, text, instance);\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 * @param {IFileManager} instance - specifies the control instance.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId, instance) {\n var matched = getParents(element, text, false, hasId, instance);\n var path = '/';\n var len = matched.length - (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 * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node, instance) {\n var matched = getParents(node, node.getAttribute('data-uid'), true, false, instance);\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 * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text, instance) {\n var matched = getParents(element, text, false, false, instance);\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 * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId, instance) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var data = [{}];\n if (!isNOU(instance) && !isNOU(instance.navigationpaneModule) && !isNOU(instance.navigationpaneModule.treeObj)) {\n data = instance.navigationpaneModule.treeObj.getTreeData(el);\n }\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') : getValue('name', data[0]));\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 = '/';\n var i = 1;\n for (i; i < parent.pathId.length; i++) {\n var data = getValue(parent.pathId[parseInt(i.toString(), 10)], 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 * Get all child items\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent ID.\n * @returns {Object[]} An array of child items\n * @private\n */\nexport function getAllChildItems(parent, parentId) {\n var children = parent.fileSystemData.filter(function (item) {\n return String(item.parentId) === String(parentId);\n });\n var allChildren = children.slice();\n children.forEach(function (child) {\n var childId = child.id;\n allChildren = allChildren.concat(getAllChildItems(parent, childId));\n });\n return allChildren;\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 (isFileSystemData(parent)) {\n if (value === '') {\n parent.itemData = parent.fileSystemData;\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n else {\n parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;\n var currData = getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n var parentId = getValue('id', currData);\n var filteredData = getAllChildItems(parent, parentId);\n var data = new DataManager(filteredData).\n executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));\n var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;\n parent.itemData = data;\n parent.responseData.error = null;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchValue, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n return;\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') || element.classList.contains('e-text-content')) {\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 */\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 */\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 {BeforeImageLoadEventArgs} - returns the eventargs.\n * @private\n */\nexport function getImageUrl(parent, item) {\n var imgUrl = isFileSystemData(parent) ? getValue('imageUrl', item) : '';\n if (isFileSystemData(parent)) {\n var eventArgs_1 = {\n fileDetails: [item],\n imageUrl: imgUrl,\n useImageAsUrl: true\n };\n parent.trigger('beforeImageLoad', eventArgs_1);\n return eventArgs_1;\n }\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\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 data = { 'action': 'getImage', 'path': parent.path + fileName, 'id': getValue('id', item) };\n var ajaxSettings = {\n url: baseUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl,\n useImageAsUrl: true,\n ajaxSettings: ajaxSettings\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs;\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 */\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, '/').replace(/^.*?(?=\\/)/, '') + 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 */\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 */\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None' && !isNullOrUndefined(parent.sortOrder)) {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\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 */\nexport function getObject(parent, key, value) {\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var result = currFiles.filter(function (data) { return data[key].toString() === value; });\n return result[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 = parent.uploadObj.dropArea == null ? getLocaleText(parent, '') : 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 */\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 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 */\nexport function setDateObject(args) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n setValue('_fm_created', createdDate, args[i]);\n setValue('_fm_modified', modifiedDate, args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @param {IFileManager} [parent] - optional parameter representing the parent IFileManager.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n 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 var data = getObject(parent, key, folders[parseInt(i.toString(), 10)]);\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n if (!isNullOrUndefined(id)) {\n parent.pathId.push(id);\n }\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 */\nexport function openSearchFolder(parent, data) {\n parent.originalPath = getFullPath(parent, data, parent.path);\n var root = getValue(parent.pathId[0], parent.feParent);\n var navData = parent.feParent[getValue('_fm_id', parent.itemData[0])];\n var isRoot = isNullOrUndefined(navData) || getValue('_fm_id', navData) === 'fe_tree';\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n var searchData = getObject(parent, key, isFileSystemData(parent) ? getValue('id', data) : getValue('name', data));\n if (isNullOrUndefined(searchData)) {\n if (!isRoot) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n }\n else {\n setNextPath(parent, parent.path);\n return;\n }\n }\n else {\n var id = getValue('_fm_id', searchData);\n parent.setProperties({ path: parent.originalPath }, true);\n parent.pathId.push(id);\n parent.itemData = [searchData];\n parent.pathNames.push(getValue('name', searchData));\n }\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n if (parent.activeModule === 'navigationpane' && !parent.selectedNodes[0].includes('/')) {\n parent.targetPath = getTargetPath(parent, parent.actionRecords[0]);\n }\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 */\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 name_1 = parent.dragData[i] ? parent.dragData[i].name : null;\n var srcData = isFileSystemData(parent) ? name_1 : 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 && !isNullOrUndefined(parent.ajaxSettings.url) ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath) && isFileSystemData(parent) && fPath !== '' && fPath !== '\\\\') {\n fPath = '\\\\' + args.cwd.parentId + '\\\\';\n }\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return '/';\n }\n return fPath.replace(/\\\\/g, '/').replace(/^.*?(?=\\/)/, '') + filePath;\n }\n else {\n return isFileSystemData(parent) ? filePath : 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 parent.trigger('success', { action: operation, result: result });\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}\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 */\nexport function getDuplicateData(parent, name) {\n var data = null;\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Remove item class handler\n *\n * @param {Element} scrollParent - specifies the scrolling target.\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} nodeClass - specifies the node class.\n * @param {number} clientY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the target element.\n * @returns {void}\n * @private\n */\nexport function scrollHandler(scrollParent, parent, nodeClass, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select('.' + nodeClass, scrollParent);\n if ((clientY >= (elementData.top + scrollParent.clientHeight - 30)) && !isNullOrUndefined(node)) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, position);\n }\n if (!isNullOrUndefined(node) && (clientY <= (elementData.top + 30))) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, -position);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n var scrollParent;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n scrollParent = parent.navigationpaneModule.treeObj.element.parentElement;\n scrollHandler(scrollParent, parent, 'e-level-2', args.event.y);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n scrollParent = parent.detailsviewModule.gridObj.element.querySelector('.e-content');\n scrollHandler(scrollParent, parent, 'e-row', args.event.y);\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n scrollParent = parent.largeiconsviewModule.element.firstElementChild;\n scrollHandler(scrollParent, parent, 'e-large-icon', args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\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 */\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 */\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 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 */\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 */\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 */\nexport function createDeniedDialog(parent, data, action) {\n var permission = getValue('permission', data);\n var message = getValue('message', permission);\n var restriction = getValue('uploadContentFilter', permission) === 1 ? 'Folder Upload' : 'File Upload';\n if (message === '') {\n if (!isNOU(permission) && getValue('upload', permission) && getValue('uploadContentFilter', permission) === 1) {\n message = getLocaleText(parent, 'FolderUpload-Access-Message').replace('{0}', getValue('name', data)).replace('{1}', restriction);\n }\n else if (!isNOU(permission) && getValue('upload', permission) && getValue('uploadContentFilter', permission) === 2) {\n message = getLocaleText(parent, 'FileUpload-Access-Message').replace('{0}', getValue('name', data)).replace('{1}', restriction);\n }\n else {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\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 */\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 */\nexport function hasReadAccess(data) {\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 */\nexport function hasEditAccess(data) {\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 */\nexport function hasContentAccess(data) {\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 */\nexport function hasUploadAccess(data) {\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 */\nexport function hasDownloadAccess(data) {\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 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 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/**\n * Close dialog popup handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function closePopup(parent) {\n if (!isNullOrUndefined(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n}\n/**\n * Get target path from item data.\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} itemData - specifies the item elements.\n * @returns {string} returns the path.\n * @private\n */\nexport function getTargetPath(parent, itemData) {\n if (parent.hasId && !isNOU(getValue('filterId', itemData))) {\n return getValue('filterId', itemData).replace(/\\\\/g, '/').replace(/^[^/]+\\//, '/');\n }\n else {\n return getValue('filterPath', itemData).replace(/\\\\/g, '/');\n }\n}\n/**\n * Access control handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} itemData - specifies the item elements.\n * @param {string} action - specifies the action.\n * @param {boolean} isPathPermision - specifies the path permission.\n * @returns {string} returns the path.\n * @private\n */\nexport function getAccessDetails(parent, itemData, action, isPathPermision) {\n var accessMessage = '';\n for (var i = 0; i < itemData.length; i++) {\n var permission = getValue('permission', itemData[i]);\n if (permission == null) {\n permission = undefined;\n }\n if (isPathPermision) {\n if (permission && (!getValue('read', permission) || !getValue('writeContents', permission))) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', 'writeContents');\n }\n }\n }\n else {\n var copyOrMovePermission = action === 'copy' ? getValue('copy', permission) : getValue('write', permission);\n if (permission && (!getValue('read', permission) || !copyOrMovePermission)) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', action);\n }\n }\n }\n if (accessMessage !== '') {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: '401',\n message: accessMessage,\n fileExists: null\n },\n files: null\n };\n break;\n }\n }\n return accessMessage;\n}\n","import { Ajax, Fetch, createElement, select, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails, getTargetPath } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\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 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 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 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 var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\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 var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\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 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 var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) {\n return !isNOU(item) && String(item.id) === String(id);\n });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n if (!isNOU(target.filterId)) {\n Object.assign(newItem, {\n filterId: target.filterId + target.id + '/'\n });\n }\n return newItem;\n}\n/**\n * Function to create an error response.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} message - specifies the error message.\n * @param {string} code - specifies the error code.\n * @param {Object[]} fileName - specifies the file name.\n * @returns {void}\n * @private\n */\nfunction createErrorObject(parent, message, code, fileName) {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: code,\n message: message,\n fileExists: fileName != null ? fileName : null\n },\n files: null\n };\n}\n/**\n * Function to trigger folder creation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerFolderCreation(parent, data, eventArgs) {\n var createEventArgs = {\n folderName: getValue('name', data),\n cancel: false,\n path: getValue('path', data),\n parentFolder: getValue('data', data)\n };\n parent.trigger('beforeFolderCreate', createEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.folderName)) {\n var data_1 = args.parentFolder[0];\n var newObject = createNewItem(data_1, data_1, args.folderName, false);\n parent.fileSystemData.push(newObject);\n }\n else {\n var message = 'A file or folder with the name ' + args.folderName + ' already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger delete operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerDeleteOperation(parent, data, eventArgs) {\n var deleteEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeDelete', deleteEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n args.itemData.forEach(function (itemData) {\n var index = findIndexById(parent, itemData.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n if (!itemData.isFile) {\n var subItems = parent.fileSystemData.filter(function (obj) { return obj.filterPath.includes(itemData.name); });\n subItems.forEach(function (subItem) {\n var index = findIndexById(parent, subItem.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n });\n }\n });\n }\n });\n}\n/**\n * Function to trigger rename operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerRenameOperation(parent, data, eventArgs) {\n var renameEventArgs = {\n cancel: false,\n newName: getValue('newName', data),\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeRename', renameEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.newName)) {\n var fileData = filterById(parent, args.itemData[0].id);\n var oldName = fileData.name;\n fileData.name = args.newName;\n updateChildrenFilterPath(parent, fileData.id, oldName, args.newName);\n parent.responseData.error = null;\n }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to update child item filter path.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent id.\n * @param {string} oldName - specifies the previous name.\n * @param {string} newName - specifies the new name.\n * @returns {void}\n * @private\n */\nfunction updateChildrenFilterPath(parent, parentId, oldName, newName) {\n parent.fileSystemData.forEach(function (item) {\n if (String(item.parentId) === String(parentId)) {\n var oldPath = item.filterPath;\n var newPath = oldPath.replace(oldName + '\\\\', newName + '\\\\');\n item.filterPath = newPath;\n updateChildrenFilterPath(parent, item.id, oldName, newName);\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target_1 = args.targetData;\n var getTargetFiles = filterByParent(parent, target_1.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target_1.hasChild) {\n target_1.hasChild = !currItem.isFile;\n var targetItem = parent.fileSystemData\n .filter(function (item) { return String(item.id) === String(target_1.id); });\n if (targetItem.length > 0) {\n targetItem[0].hasChild = target_1.hasChild;\n }\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentId) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target_1;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target_1 = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target_1.id;\n fileData.filterPath = target_1.id === 0 ? '\\\\' : target_1.filterPath + target_1.name + '\\\\';\n if (!isNOU(target_1.filterId)) {\n fileData.filterId = target_1.filterId + target_1.id + '/';\n }\n if (!currItem.isFile) {\n updateMovedItemChildren(parent, fileData);\n }\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\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 triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' || event === 'rename-end-parent'\n ? getValue('path', data) : parent.path;\n var pathArray = filePath.replace(/^\\/|\\/$/g, '').split('/');\n var idValue = event === 'rename-end-parent' || (event === 'path-changed' && getValue('data', data).length !== 0 && isNOU(parent.renamedItem))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n if (action === 'copy') {\n itemData = parent.pasteNodes.map(function (item) { return filterById(parent, item); });\n }\n else {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) || isMultipleFiles ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\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 performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\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 to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\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 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 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 }\n if (location_1.indexOf('\\\\') === -1) {\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function to move operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} itemData - specifies the data.\n * @returns {void}\n * @private\n */\nfunction updateMovedItemChildren(parent, itemData) {\n var childItems = filterByParent(parent, itemData.id);\n childItems.forEach(function (childItem) {\n childItem.filterPath = itemData.filterPath + itemData.name + '\\\\';\n if (!isNOU(itemData.filterId)) {\n childItem.filterId = itemData.filterId + itemData.id + '/';\n }\n if (!childItem.isFile) {\n updateMovedItemChildren(parent, childItem);\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(parent, 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 try {\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 (!isNOU(result.error) && 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 }\n catch (error) {\n handleCatchError(parent, error, '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 try {\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 catch (error) {\n handleCatchError(parent, error, 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 try {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = isFileSystemData(parent) ? result.files[result.files.length - 1] : result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var createEventArgs = {\n folderName: itemName,\n path: parent.path,\n parentFolder: parent.itemData\n };\n parent.trigger('folderCreate', createEventArgs);\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 catch (error) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'create');\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 * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result) {\n try {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n var renameEventArgs = {\n newName: parent.renamedItem.name,\n itemData: [parent.renamedItem],\n path: parent.path\n };\n parent.trigger('rename', renameEventArgs);\n if (parent.activeModule === 'navigationpane') {\n var pathObject = getPathObject(parent);\n var pathLevel = parent.pathId[parent.pathId.length - 1].split('_').length - 2;\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n var renamePath = getTargetPath(parent, parent.renamedItem);\n read(parent, events.renameEndParent, renamePath);\n if (!isNOU(pathObject) && parent.pathNames.length > 1 && pathLevel <= parent.pathNames.length - 1) {\n parent.pathNames[pathLevel] = parent.renameText;\n if (!parent.hasId) {\n parent.setProperties({ path: \"/\" + parent.pathNames.slice(1).join('/') + \"/\" }, true);\n }\n }\n parent.itemData = parent.navigationpaneModule.previousSelected.length > 0\n ? parent.navigationpaneModule.treeObj.getTreeData(parent.navigationpaneModule.previousSelected[0]) : parent.itemData;\n read(parent, events.pathChanged, parent.path);\n parent.itemData[0] = parent.renamedItem;\n parent.renamedItem = null;\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 catch (error) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'rename');\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 try {\n var moveorcopyEventArgs = {\n itemData: result.files,\n isCopy: operation === 'copy' ? true : false,\n path: path,\n targetData: parent.itemData[0],\n targetPath: parent.path\n };\n parent.trigger('move', moveorcopyEventArgs);\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 catch (error) {\n handleCatchError(parent, error, 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 try {\n var deleteEventArgs = {\n itemData: result.files,\n path: path\n };\n parent.trigger('delete', deleteEventArgs);\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 catch (error) {\n handleCatchError(parent, error, '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 try {\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 catch (error) {\n handleCatchError(parent, error, '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(parent, event, path, searchString, showHiddenItems, caseSensitive) {\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 try {\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 catch (error) {\n handleCatchError(parent, error, '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 var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var ajaxSettings = {\n url: downloadUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { data: data, cancel: false, useFormPost: true, ajaxSettings: ajaxSettings };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n if (downloadArgs.useFormPost) {\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 else {\n try {\n var contentDisposition_1;\n var fileName_1;\n var fetch_1 = new Fetch({\n url: getValue('url', downloadArgs.ajaxSettings),\n type: getValue('type', downloadArgs.ajaxSettings),\n contentType: getValue('contentType', downloadArgs.ajaxSettings),\n responseType: getValue('responseType', downloadArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', downloadArgs.ajaxSettings),\n onLoad: function (e) {\n contentDisposition_1 = e.headers.get('Content-Disposition');\n if (contentDisposition_1) {\n var filenameMatch = contentDisposition_1.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/);\n var extractedFilename = filenameMatch && filenameMatch[1];\n fileName_1 = extractedFilename ? extractedFilename.replace(/['\"]/g, '') : fileName_1;\n }\n else {\n fileName_1 = parent.itemData.length > 1 ? 'files.zip' : getValue('isFile', parent.itemData[0]) ? getValue('name', parent.itemData[0]) : getValue('name', parent.itemData[0]) + '.zip';\n }\n },\n onSuccess: function (e) {\n parent.trigger('success', downloadArgs);\n var blob = e;\n var blobUrl = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.href = blobUrl;\n link.download = fileName_1;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.downloadUrl\n }\n };\n createDialog(parent, 'Error', result);\n parent.trigger('failure', downloadArgs);\n }\n });\n fetch_1.send(JSON.stringify(downloadArgs.data));\n }\n catch (error) {\n handleCatchError(parent, error, 'download');\n }\n }\n }\n });\n}\n/**\n * Function for on catch handler in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {any} error - specifies the catch error.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction handleCatchError(parent, error, action) {\n var errorResult = {\n files: null,\n error: {\n message: error.message,\n fileExists: null\n }\n };\n onFailure(parent, errorResult, action);\n}\n/**\n * Function for trigger Fetch success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @returns {void}\n */\nexport function triggerFetchSuccess(parent, ajaxSettings) {\n parent.notify(events.afterRequest, { action: 'success' });\n if (ajaxSettings && typeof getValue('onSuccess', ajaxSettings) === 'function') {\n getValue('onSuccess', ajaxSettings)();\n }\n}\n/**\n * Function for trigger Fetch failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n */\nexport function triggerFetchFailure(parent, ajaxSettings, result) {\n parent.notify(events.afterRequest, { action: 'failure' });\n createDialog(parent, 'Error', result);\n if (typeof getValue('onFailure', ajaxSettings) === 'function') {\n getValue('onFailure', ajaxSettings)();\n }\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization, Fetch } 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, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass, getTargetPath } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details) {\n var options = getOptions(parent, text, e, details);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details) {\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 var index;\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 () {\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 () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index = val.name.indexOf('.') + 1;\n return (index === 0 && (!val.isFile)) ? 'Folder' : ((index !== 0) ? val.name.substr(index).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] === undefined) {\n strArr = details.name.split(',').map(function (val) {\n index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).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 () {\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/**\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 = '';\n if (parent.activeModule === 'navigationpane') {\n newPath = getTargetPath(parent, parent.itemData[0]);\n }\n else {\n newPath = parent.path;\n }\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 {BeforeImageLoadEventArgs} imageData - specifies the image eventargs.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageData) {\n var content = createElement('div', { className: 'e-image-wrap' });\n if (imageData.useImageAsUrl) {\n var image = createElement('img', { className: 'e-image', attrs: { src: imageData.imageUrl, alt: header } });\n content.appendChild(image);\n }\n else {\n var fetch_1 = new Fetch({\n url: getValue('url', imageData.ajaxSettings),\n type: getValue('type', imageData.ajaxSettings),\n contentType: getValue('contentType', imageData.ajaxSettings),\n responseType: getValue('responseType', imageData.ajaxSettings),\n beforeSend: getValue('beforeSend', imageData.ajaxSettings),\n onSuccess: function (e) {\n var blobUrl = URL.createObjectURL(e);\n var image = createElement('img', { className: 'e-image', attrs: { src: blobUrl, alt: header } });\n content.appendChild(image);\n triggerFetchSuccess(parent, imageData.ajaxSettings);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + getValue('url', imageData.ajaxSettings)\n }\n };\n triggerFetchFailure(parent, imageData.ajaxSettings, result);\n }\n });\n var data = getValue('data', imageData.ajaxSettings);\n fetch_1.send(data);\n }\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\n template: '<span class=\"e-fe-text\">${name}</span>',\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"sequentialUpload\", 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 __decorate([\n Property(0)\n ], UploadSettings.prototype, \"chunkSize\", 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, \"sortComparer\", 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_FOLDER = 'e-icons e-folder';\n/** @hidden */\nexport var ICON_FILE = 'e-icons e-file-format';\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable, Fetch } 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, DataUtil } 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, triggerFetchFailure, triggerFetchSuccess } 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, getLocaleText } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.imageEventArgsMap = new Map();\n this.imageUrlCache = new Map();\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', imageAttributes: '_fm_imageAttr', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n if (this.parent.largeIconsTemplate) {\n this.listObj.template = this.parent.largeIconsTemplate;\n this.listObj.templateID = this.parent.element.id + '_largeIconsTemplate';\n }\n this.items = [];\n this.items = this.renderList(args);\n if (this.parent.sortComparer && this.parent.sortBy !== 'None') {\n this.items = this.allItems = DataUtil.sort(this.items, this.parent.sortBy, this.comparer.bind(this));\n }\n else {\n this.items = this.allItems = getSortedData(this.parent, this.items);\n }\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0 && !isNOU(this.parent.virtualizationModule)) {\n this.parent.virtualizationModule.setUIVirtualization();\n }\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj, null, null, this.parent);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.parent.renderReactTemplates();\n if (this.imageEventArgsMap.size > 0) {\n this.loadImages();\n }\n this.listElements.setAttribute('aria-label', 'listbox');\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0 && !isNOU(this.parent.virtualizationModule)) {\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.loadImages = function () {\n var _this = this;\n var imageEle = this.parent.element.querySelectorAll('.e-list-img');\n imageEle.forEach(function (imgElement) {\n var imageKey = imgElement.getAttribute('data-image-key');\n if (!imageKey) {\n return;\n }\n if (_this.imageUrlCache.has(imageKey)) {\n imgElement.setAttribute('src', _this.imageUrlCache.get(imageKey));\n imgElement.classList.remove('image-blur');\n return;\n }\n var imageDetails = _this.imageEventArgsMap.get(imageKey);\n if (!imageDetails) {\n return;\n }\n var fetch = new Fetch({\n url: getValue('url', imageDetails.ajaxSettings),\n type: getValue('type', imageDetails.ajaxSettings),\n contentType: getValue('contentType', imageDetails.ajaxSettings),\n responseType: getValue('responseType', imageDetails.ajaxSettings),\n beforeSend: getValue('beforeSend', imageDetails.ajaxSettings),\n onSuccess: function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n _this.imageUrlCache.set(imageKey, blobUrl);\n imgElement.setAttribute('src', blobUrl);\n imgElement.classList.remove('image-blur');\n triggerFetchSuccess(_this.parent, imageDetails.ajaxSettings);\n },\n onFailure: function (response) {\n var result = {\n files: null,\n error: {\n code: response.status ? response.status.toString() : '404',\n message: getLocaleText(_this.parent, 'Network-Error') + ' ' + getValue('url', imageDetails.ajaxSettings),\n fileExists: null\n }\n };\n triggerFetchFailure(_this.parent, imageDetails.ajaxSettings, result);\n }\n });\n fetch.send(getValue('data', imageDetails.ajaxSettings));\n });\n };\n LargeIconsView.prototype.comparer = function (x, y) {\n if (this.parent.sortOrder === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return this.parent.sortComparer(x, y);\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: false,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.dragData.push(this.getItemObject(activeEle[parseInt(i.toString(), 10)]));\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 var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\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.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.largeIconsTemplate) {\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 if (txt.indexOf(type) !== -1) {\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n }\n this.renderCheckbox(args);\n }\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\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 imageData = getImageUrl(this.parent, items[i]);\n if (imageData.useImageAsUrl) {\n setValue('_fm_imageUrl', imageData.imageUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n var uniqueKey = \"img_\" + name_1 + \"_\" + i;\n this.imageEventArgsMap.set(uniqueKey, imageData);\n setValue('_fm_imageUrl', '', items[i]);\n setValue('_fm_imageAttr', { alt: name_1, class: 'e-list-img image-blur', 'data-image-key': uniqueKey }, items[i]);\n }\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem && this.parent.activeModule === 'largeiconsview') {\n this.clearSelect();\n this.addSelection(this.parent.renamedItem);\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 };\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 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 ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\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 '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 case 'showItemCheckBoxes':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n if (_this.parent.isDevice) {\n _this.tapCount = eve.tapCount;\n _this.tapEvent = eve;\n setTimeout(function () {\n if (_this.tapCount > 0) {\n _this.doTapAction(_this.tapEvent);\n }\n _this.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n _this.dblClickHandler(eve);\n }\n else {\n _this.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n _this.multiSelect = _this.parent.allowMultiSelection ? true : false;\n if (_this.parent.allowMultiSelection) {\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n _this.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 ctrlKey = this.parent.isMac ? e.metaKey : e.ctrlKey;\n var isMacRightClick = this.parent.isMac && e.ctrlKey && e.shiftKey;\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 || isMacRightClick) && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.addActive(item);\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (ctrlKey && e.shiftKey && !isMacRightClick) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey && !isMacRightClick) {\n if (!(e && ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n 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 imageData = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imageData);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n this.parent.isFile = getValue('isFile', this.getItemObject(item));\n };\n /* istanbul ignore next */\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 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 case 'back':\n this.parent.traverseBackward();\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 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 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 var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n };\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 var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null\n : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data\n : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n LargeIconsView.prototype.addSelection = function (data) {\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 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 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 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 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 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 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 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 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 BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('fileupload')) {\n this.renderFileFolderIcons(args, CLS.ICON_FILE, !this.parent.uploadObj.directoryUpload);\n }\n if (args.item.id === this.getMenuId('folderupload')) {\n this.renderFileFolderIcons(args, CLS.ICON_FOLDER, this.parent.uploadObj.directoryUpload);\n }\n };\n ContextMenu.prototype.renderFileFolderIcons = function (menuArgs, fileFolderIcon, isDirectory) {\n var iconSpan = createElement('span');\n var element = menuArgs.element;\n element.insertBefore(iconSpan, isDirectory ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', fileFolderIcon + ' ' + CLS.MENU_ICON);\n };\n ContextMenu.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: false,\n element: args.element,\n event: args.event,\n isFocused: args.isFocused,\n fileDetails: [this.menuItemData],\n items: args.items,\n parentItem: args.parentItem,\n menuType: this.menuType\n };\n this.parent.trigger('menuClose', eventArgs, function (menuCloseArgs) {\n if (menuCloseArgs.cancel) {\n args.cancel = menuCloseArgs.cancel;\n return;\n }\n });\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule === 'navigationpane') {\n this.parent.pathId.pop();\n var parentKey = [];\n var itemKeys = Object.keys(this.parent.feParent);\n for (var _i = 0, itemKeys_1 = itemKeys; _i < itemKeys_1.length; _i++) {\n var item = itemKeys_1[_i];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var itemData = getValue(item, this.parent.feParent);\n if (this.parent.pathNames.indexOf(itemData.name) !== -1) {\n parentKey.push(itemData._fm_id);\n }\n }\n this.parent.pathId.push(parentKey[parentKey.length - 1]);\n this.parent.navigationpaneModule.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n var selected = false;\n var uid;\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 }\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 }\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 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 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 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('aria-rowindex'), 10) - 1]);\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 if (!isNOU(uid)) {\n this.navUid = uid;\n }\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 else {\n var itemsToRemove = ['Delete', 'Rename', 'Cut', 'Copy'];\n for (var i = 0; i < this.disabledItems.length; i++) {\n var item = this.disabledItems[i];\n if (itemsToRemove.indexOf(item) !== -1) {\n this.disabledItems.splice(i, 1);\n i--;\n }\n }\n }\n /* istanbul ignore next */\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 if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n else {\n var pasteIndex = this.disabledItems.indexOf('Paste');\n if (pasteIndex !== -1) {\n this.disabledItems.splice(pasteIndex, 1);\n }\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 if (enable) {\n this.disabledItems = this.disabledItems.filter(function (item) { return items.indexOf(item) === -1; });\n }\n for (var i = 0; i < items.length; i++) {\n var validItem = this.checkValidItem(items[i]);\n if (validItem === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (validItem === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.navUid + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (!isNOU(selectedTreeNode) &&\n this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n else {\n var indexToRemove = this.disabledItems.indexOf('Open');\n if (indexToRemove !== -1) {\n this.disabledItems.splice(indexToRemove, 1);\n }\n }\n if (this.parent.selectedItems.length === 0) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n }\n else if (this.parent.activeModule !== 'navigationpane') {\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename', 'Paste');\n }\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 var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\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 else {\n this.disabledItems = this.disabledItems.filter(function (item) { return item !== 'SelectAll'; });\n }\n if (this.parent.selectedNodes.length === 0) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(this.currentElement)) {\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 }\n return -1;\n };\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\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 var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'fileupload' || itemText === 'folderupload') {\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 if (itemText !== 'cut' && itemText !== 'copy') {\n _this.isMenuItemClicked = true;\n }\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 === 'navigationpane') {\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n _this.parent.folderPath = _this.parent.path;\n }\n else {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'name':\n case 'size':\n case 'date':\n case 'ascending':\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 case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n case 'fileupload':\n case 'folderupload':\n _this.parent.setProperties({ uploadSettings: { directoryUpload: itemText === 'fileupload' ? false : true } });\n _this.parent.dataBind();\n uploadItem(_this.parent);\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD,\n items: [\n {\n id: this.getMenuId('folderupload'), text: getLocaleText(this.parent, 'Folder'),\n iconCss: !this.parent.uploadObj.directoryUpload ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('fileupload'), text: getLocaleText(this.parent, 'File'),\n iconCss: this.parent.uploadObj.directoryUpload ? null : CLS.TB_OPTION_TICK\n }\n ]\n };\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.split(' ').join('').toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\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 'File': 'File',\n 'Folder': 'Folder',\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 'FolderUpload-Access-Message': '{0} is not accessible. you need permission to perform the {1} action.',\n 'FileUpload-Access-Message': '{0} is not accessible. you need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, detach, selectAll, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem, closePopup } 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 _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.existingFileCount = 0;\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 _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\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 _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 _this.dragSelectedItems = [];\n _this.onScrollHandler = function () {\n if (!isNOU(_this.contextmenuModule) && !isNOU(_this.contextmenuModule.contextMenu)) {\n _this.contextmenuModule.contextMenu.close();\n }\n };\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 name: 'Toolbar'\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this],\n name: 'NavigationPane'\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this],\n name: 'DetailsView'\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this],\n name: 'ContextMenu'\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this],\n name: 'Virtualization'\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 if (this.fileView === 'Details') {\n this.largeiconsviewModule.element.classList.add(CLS.DISPLAY_NONE);\n }\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 chunkSize: this.uploadSettings.chunkSize,\n retryCount: 0\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n chunkUploading: this.onChunkUploading.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 sequentialUpload: this.uploadSettings.sequentialUpload,\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.onChunkUploading = 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 }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\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 if (this.uploadSettings.chunkSize === 0) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\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 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 var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n if (this.allowOrDenyUpload(args, details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n FileManager.prototype.allowOrDenyUpload = function (args, uploadDetails) {\n var permission = getValue('permission', uploadDetails);\n if (isNOU(args) || isNOU(permission) || isNOU(getValue('uploadContentFilter', permission))) {\n return false;\n }\n var hasFolder = args.filesData.some(function (f) {\n var name = !isNOU(f.name) ? f.name : '';\n return name.includes('/') || name.includes('\\\\');\n });\n var hasFile = args.filesData.some(function (f) {\n var name = !isNOU(f.name) ? f.name : '';\n return !(name.includes('/') || name.includes('\\\\'));\n });\n if (hasFolder && getValue('uploadContentFilter', permission) === 1) {\n return true;\n }\n if (hasFile && getValue('uploadContentFilter', permission) === 2) {\n return true;\n }\n return false;\n };\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 FileManager.prototype.onChunkUploadComplete = function (files) {\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n var uploadFile = !isNullOrUndefined(files) ? getValue('file', files).name : '';\n if (uploadFile === this.retryArgs[i].file.name) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadSuccess = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\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 FileManager.prototype.onUploadFailure = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') !== -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireSelectOnDragEvent = function (isBind) {\n if (isNOU(this.view)) {\n return;\n }\n if (isBind) {\n this.viewElem = this.view === 'LargeIcons' ? this.largeiconsviewModule.element : this.element.querySelector('.e-gridcontent');\n }\n if (isBind) {\n if (this.allowMultiSelection) {\n this.on(events.layoutChange, this.onLayoutChange, this);\n this.on(events.selectionChanged, this.onLayoutChange, this);\n }\n }\n else {\n this.off(events.layoutChange, this.onLayoutChange);\n this.off(events.selectionChanged, this.onLayoutChange);\n }\n if (this.viewElem) {\n if (isBind && this.allowMultiSelection) {\n EventHandler.add(this.viewElem, 'mousedown', this.onDragStart, this);\n }\n else {\n EventHandler.remove(this.viewElem, 'mousedown', this.onDragStart);\n }\n }\n };\n FileManager.prototype.wireEvents = function () {\n if (this.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n if (this.contextMenuSettings.visible) {\n this.element.addEventListener('scroll', this.onScrollHandler, true);\n }\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 this.wireSelectOnDragEvent(false);\n EventHandler.remove(window, 'resize', this.resizeHandler);\n if (this.contextMenuSettings.visible) {\n this.element.removeEventListener('scroll', this.onScrollHandler, true);\n }\n this.keyboardModule.destroy();\n };\n FileManager.prototype.onDragStart = function (event) {\n if (this.viewElem) {\n if (this.allowDragAndDrop) {\n var targetElement = closest(event.target, this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-fe-text');\n if (targetElement) {\n return;\n }\n }\n event.preventDefault();\n this.dragX = event.pageX;\n this.dragY = event.pageY;\n if (!this.dragSelectElement) {\n this.dragSelectElement = createElement('div', {\n id: this.element.id + '_drag',\n className: 'e-filemanager e-drag-select',\n styles: 'left: ' + this.dragX + 'px;top: ' + this.dragY + 'px;'\n });\n document.body.append(this.dragSelectElement);\n }\n EventHandler.add(document, 'mouseup', this.onDragStop, this);\n EventHandler.add(this.viewElem, 'mousemove', this.onDrag, this);\n EventHandler.add(this.dragSelectElement, 'mousemove', this.onDrag, this);\n }\n };\n FileManager.prototype.onDrag = function (event) {\n event.stopPropagation();\n if (this.dragSelectElement) {\n var diffX = event.pageX - this.dragX;\n var diffY = event.pageY - this.dragY;\n setStyleAttribute(this.dragSelectElement, {\n 'left': diffX < 0 ? this.dragX + diffX + 'px' : this.dragX + 'px', 'top': diffY < 0 ? this.dragY + diffY + 'px' : this.dragY + 'px',\n 'height': Math.abs(diffY) + 'px', 'width': Math.abs(diffX) + 'px'\n });\n this.selectItems();\n }\n else {\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n };\n FileManager.prototype.onDragStop = function () {\n if (this.viewElem) {\n EventHandler.remove(document, 'mouseup', this.onDragStop);\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n if (this.dragSelectElement) {\n EventHandler.remove(this.dragSelectElement, 'mousemove', this.onDrag);\n if (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0) {\n this.setProperties({ selectedItems: this.dragSelectedItems });\n }\n this.dragSelectedItems = [];\n detach(this.dragSelectElement);\n this.dragSelectElement = null;\n }\n };\n FileManager.prototype.selectItems = function () {\n var dragRect = this.dragSelectElement.getBoundingClientRect();\n if (dragRect.height > 0 && dragRect.width > 0) {\n this.dragSelectedItems = [];\n removeClass(selectAll('.e-active', this.viewElem), ['e-active', 'e-focus']);\n removeClass(selectAll('.e-check', this.viewElem), ['e-check']);\n }\n var allItems = selectAll(this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-row', this.viewElem);\n for (var _i = 0, allItems_1 = allItems; _i < allItems_1.length; _i++) {\n var item = allItems_1[_i];\n var itemRect = item.getBoundingClientRect();\n if (!(dragRect.right < itemRect.left || dragRect.left > itemRect.right\n || dragRect.bottom < itemRect.top || dragRect.top > itemRect.bottom)\n && (dragRect.height > 0 && dragRect.width > 0)) {\n if (this.viewElem.classList.contains('e-large-icons')) {\n item.classList.add('e-active');\n this.dragSelectedItems.push(item.getAttribute('title'));\n }\n else {\n addClass(selectAll('.e-rowcell', item), ['e-active']);\n this.dragSelectedItems.push(item.querySelector('.e-drag-text').textContent);\n }\n if (this.showItemCheckBoxes) {\n if (item.querySelector('.e-frame')) {\n item.querySelector('.e-frame').classList.add('e-check');\n }\n }\n }\n }\n };\n FileManager.prototype.onLayoutChange = function () {\n if (this.enableRangeSelection) {\n this.unWireEvents();\n this.wireEvents();\n }\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 FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var height;\n var requiresRefresh = false;\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 'showItemCheckBoxes':\n this.showItemCheckBoxes = newProp.showItemCheckBoxes;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableVirtualization':\n this.enableVirtualization = newProp.enableVirtualization;\n requiresRefresh = true;\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 'enableRangeSelection':\n this.wireSelectOnDragEvent(false);\n if (newProp.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n break;\n case 'enableRtl':\n this.enableRtl = newProp.enableRtl;\n requiresRefresh = true;\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n requiresRefresh = true;\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.oldPath = oldProp.path;\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n if (this.view === 'Details') {\n var columns = this.detailsViewSettings.columns;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.sortBy; }) !== -1;\n if (!isValidSortField) {\n return;\n }\n refresh(this);\n this.notify(events.sortByChange, {});\n this.notify(events.sortColumn, {});\n }\n else {\n refresh(this);\n this.notify(events.sortByChange, {});\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 case 'fileSystemData':\n this.fileSystemData = newProp.fileSystemData;\n requiresRefresh = true;\n break;\n case 'navigationPaneTemplate':\n this.navigationPaneTemplate = newProp.navigationPaneTemplate;\n requiresRefresh = true;\n break;\n case 'largeIconsTemplate':\n this.largeIconsTemplate = newProp.largeIconsTemplate;\n requiresRefresh = true;\n break;\n }\n }\n if (requiresRefresh) {\n this.refresh();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n this.viewElem = null;\n this.dragSelectElement = null;\n this.dragSelectedItems = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Enables the specified menu 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.enableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.enableItems(items, true, 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) && !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 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 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 * Specifies the method that must be invoked to traverse the path backwards in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.traverseBackward = function () {\n if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {\n this.pathId.pop();\n this.pathNames.pop();\n var newPath = this.pathNames.slice(1).join('/');\n newPath = newPath === '' ? '/' : '/' + newPath + '/';\n this.setProperties({ path: newPath }, true);\n read(this, events.pathChanged, this.path);\n var treeNodeId = this.pathId[this.pathId.length - 1];\n this.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\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 var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the method which must be invoked to programmatically close the dialog popup in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.closeDialog = function () {\n closePopup(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([])\n ], FileManager.prototype, \"fileSystemData\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"navigationPaneTemplate\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"largeIconsTemplate\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableRangeSelection\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeFolderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"folderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDelete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"delete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeRename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"rename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeMove\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"move\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"search\", 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, \"menuClose\", 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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n 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 var _this = this;\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_1 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan_1 = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: 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 beforeItemRender: function (args) {\n var tickIcon = args.item.iconCss;\n var viewText = args.item.text === getLocaleText(_this.parent, 'View-LargeIcons');\n var iconClass = tickIcon ? ' e-menu-icon ' + tickIcon : '';\n args.element.innerHTML = '<span class=\"' + iconClass + '\"></span>' + (viewText ? largeIconSpan_1 : gridSpan_1) + args.item.text;\n var span = args.element.firstChild;\n if (span && span.className === '') {\n args.element.removeChild(span);\n }\n }\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var _this = this;\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = Object.assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n for (var _i = 0, _a = items; _i < _a.length; _i++) {\n var item = _a[_i];\n if (typeof item === 'object' && item !== null && typeof item.template === 'string') {\n var template = item.template;\n item.template = template.replace(/>((?:Upload|SortBy|View|Refresh|NewFolder|Cut|Copy|Paste|Delete|Rename|Download|SelectAll|Details))</g, function (_match, key) { return '>' + getLocaleText(_this.parent, key) + '<'; });\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n if (this.itemList.length !== 0 && this.largeIconInstance.element.querySelector('.' + CLS.EMPTY)) {\n this.largeIconInstance.element.removeChild(this.largeIconInstance.element.querySelector('.' + CLS.EMPTY));\n }\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n *\n * @returns {void}\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 *\n * @param {number} dataSourceLength The length of the data source.\n * @returns {number} 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 =\n Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) /\n (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount *\n (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 || itemCount === 0) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n *\n * @param {boolean} destroy - Set `true` to unwire the scroll event.\n * @returns {void}\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 * @returns {void}\n * @private\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.itemCount = this.itemCount !== this.largeIconInstance.itemList.length ?\n this.largeIconInstance.itemList.length : this.itemCount;\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 *\n * @param {number} startingHeight The starting height from which to calculate the scroll position.\n * @returns {number} The current scroll position.\n * @private\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 *\n * @param {number} listDiff The number of rows to update.\n * @param {boolean} isScrollingDown If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\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 *\n * @param {boolean} isScrollingDown - If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\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 * @returns {void}\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","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { 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, isFileSystemData } 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 // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = [];\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies 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 var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\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: __assign({ dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name', hasChildren: 'hasChild' }, (isNOU(this.parent.navigationPaneTemplate) && { iconCss: '_fm_icon' }), { htmlAttributes: '_fm_htmlAttr', tooltip: 'name' }),\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 nodeTemplate: this.parent.navigationPaneTemplate\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 && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW + ',.' + CLS.TEXT_CONTENT,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW) && !dragTarget.classList.contains(CLS.TEXT_CONTENT)) {\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 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, this.parent);\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 if (this.parent && this.parent.portals && this.treeObj && this.treeObj.portals) {\n for (var i = 0; i < this.treeObj.portals.length; i++) {\n if (this.parent.portals.indexOf(this.treeObj.portals[i]) === -1) {\n this.parent.portals.push(this.treeObj.portals[i]);\n }\n }\n if (this.parent.isReact) {\n this.parent.renderReactTemplates();\n }\n }\n };\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n var directories = getDirectories(files);\n var targetDirectory = this.getTreeData(target);\n if (directories.length > 0 && targetDirectory.length > 0 &&\n (directories[0].filterPath == null ||\n isNOU(targetDirectory[0])\n && targetDirectory[0].filterPath == null\n || directories[0].filterPath !==\n targetDirectory[0].filterPath)) {\n var length_1 = 0;\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line camelcase\n folders[parseInt(length_1.toString(), 10)]._fm_icon = 'e-fe-folder';\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick &&\n !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked || this.isPathDragged) {\n this.isSameNodeClicked = false;\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.isPathDragged = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.setProperties({ selectedNodes: [node.getAttribute('data-uid')] });\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node, this.parent);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\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 && this.isSameNodeClicked) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node, this.parent);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\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 this.isNodeExpandCalled = true;\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? nodeData[0].name : id;\n var path = getPath(args.node, newText, isId, this.parent);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n }\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 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], true);\n }\n this.expandNodeTarget = '';\n }\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.setProperties({ selectedNodes: [sleId] });\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.addChild(args.files, id, false);\n this.treeObj.setProperties({ 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.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\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 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 = this.previousSelected.length > 0 && this.treeObj.getTreeData(this.previousSelected[0]).length !== 0\n ? this.previousSelected[0] : getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n this.updateItemData();\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 var data = this.treeObj.getTreeData();\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 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, this.parent.path);\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.setProperties({ selectedNodes: [e.selectedNode] });\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n if (isFileSystemData(this.parent)) {\n this.moveNames = [];\n var obj = this.parent.dragData;\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 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 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 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 NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\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 var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n 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 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 (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\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 var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n if (!obj || !Array.isArray(obj)) {\n return;\n }\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 var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\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 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 NavigationPane.prototype.getTreeData = function (args) {\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 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 node = select('[data-uid=\"' + this.parent.pathId[this.parent.pathId.length - 1] + '\"]', this.treeObj.element);\n updatePath(node, this.parent.itemData[0], this.parent);\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend, SanitizeHtmlHelper } 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/* eslint-disable @typescript-eslint/no-explicit-any */\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.isMultiSelect = false;\n this.pasteOperation = false;\n this.uploadOperation = 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 back: 'backspace'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n var _this = this;\n if (this.parent.enablePersistence) {\n var gridPersistenceValue = window.localStorage.getItem('grid' + this.parent.element.id + '_grid');\n if (!isNOU(gridPersistenceValue)) {\n var model = JSON.parse(gridPersistenceValue);\n if (!isNOU(model) && Object.keys(model).length > 0 && 'sortSettings' in model) {\n delete model.sortSettings;\n window.localStorage.setItem('grid' + this.parent.element.id + '_grid', JSON.stringify(model));\n }\n }\n }\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.parent.sortBy; }) !== -1;\n if (this.parent.isMobile || !isValidSortField) {\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.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 load: function () {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n if (this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization && this.parent.enablePersistence) {\n this.isLoaded = true;\n }\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n if (this.parent.portals && this.parent.navigationpaneModule &&\n this.parent.navigationpaneModule.treeObj && this.parent.navigationpaneModule.treeObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.navigationpaneModule.treeObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {number} - 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 var enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return \"<div class=\\\"e-fe-text\\\">\" + name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div><span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n var _loop_1 = function (i, len) {\n columns[i].headerText = getLocaleText(this_1.parent, columns[i].headerText);\n if (columns[i].field === 'name' && !isNOU(columns[i].template) && !(typeof columns[i].template === 'function')) {\n var template_1 = columns[i].template;\n columns[i].template = initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return template_1.replace(/\\${name}/g, name);\n });\n }\n };\n var this_1 = this;\n for (var i = 0, len = columns.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '70' : '56');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n if (this.parent.enableRangeSelection) {\n var HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };\n columns.push(HiddenName);\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 text = getValue('name', args.data);\n var textEle = args.row.querySelector('[title= \"' + text + '\"]');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n if (name_1.indexOf(type) !== -1) {\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n 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 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 var _this = this;\n showSpinner(this.parent.element);\n var nameColumn = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === _this.parent.sortBy; });\n if (nameColumn && !('sortComparer' in nameColumn) || this.parent.sortOrder === 'None') {\n var items = getSortedData(this.parent, (this.parent.enableVirtualization)\n ? args.result\n : 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.enableVirtualization) || this.isLoaded) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true && (!isNullOrUndefined(this.gridObj.getDataRows()) && this.gridObj.getDataRows().length > 0)) {\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 && this.parent.selectedItems.length === 0) {\n this.gridObj.clearSelection();\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 if (this.parent.sortOrder === 'None' && !isNOU(this.gridObj.element)) {\n var sortIconElement = this.gridObj.element.querySelector('.e-ascending, .e-descending');\n if (sortIconElement && sortIconElement.classList) {\n sortIconElement.classList.remove('e-icon-ascending', 'e-ascending', 'e-icon-descending', 'e-descending');\n }\n }\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && !this.parent.hasId && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n DetailsView.prototype.addSelection = function (data) {\n var items = this.gridObj.getCurrentViewRecords();\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 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 this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showItemCheckBoxes':\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 var pathField = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === 'filterPath'; });\n if ((this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) ||\n (!isNullOrUndefined(pathField) && !isNullOrUndefined(pathField.hideAtMedia) && pathField.hideAtMedia !== '')) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.wireClickEvent(true);\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 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 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 var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\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 imageData = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imageData);\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 if (this.gridObj == null) {\n return;\n }\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n var filterPathInSettings = this.parent.detailsViewSettings.columns.some(function (col) { return col.field === 'filterPath'; });\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath') && !filterPathInSettings) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n 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 DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n 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.querySelector('colgroup');\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].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else {\n gridHeaderColGroup.children[i].style.width = '180px';\n gridContentColGroup.children[i].style.width = '180px';\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && isNullOrUndefined(this.dragObj)) {\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\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 var info = null;\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 ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n if (!this.isMultiSelect) {\n this.isMultiSelect = true;\n if ((args.isShiftPressed || args.isCtrlPressed) && !this.parent.allowMultiSelection && (args.target && args.target.parentElement && !args.target.parentElement.classList.contains('e-checkbox-wrapper'))) {\n args.cancel = true;\n var rowIndex = (args && args.rowIndexes)\n ? args.rowIndexes[args.rowIndexes.length - 1]\n : args.rowIndex;\n this.gridObj.selectRow(rowIndex);\n }\n this.isMultiSelect = false;\n }\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 if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\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 var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n 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 var item = this.gridObj.getRowByIndex(args.rowIndex);\n if (!isNOU(item)) {\n item.removeAttribute('tabindex');\n }\n }\n else 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 if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').removeAttribute('tabindex');\n }\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 EventHandler.add(this.parent.element, 'focusout', this.onBlur, 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 EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\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 _this.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (_this.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', _this.parent.allowMultiSelection, _this.gridObj.selectionModule);\n addClass([_this.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 = _this.gridObj.getRows().indexOf(row);\n _this.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.onBlur = function (e) {\n if ((e.relatedTarget !== null && closest(e.relatedTarget, '.e-grid') !== e.relatedTarget)) {\n return;\n }\n if (!isNOU(this.gridObj.element)) {\n var thElements = this.gridObj.element.querySelectorAll('th');\n for (var i = 0; i < thElements.length; i++) {\n if (thElements[i].classList.contains('e-focus')) {\n this.addFocus(null);\n }\n }\n }\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('aria-rowindex'), 10) - 1 : null;\n };\n /* istanbul ignore next */\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 /* istanbul ignore next */\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1 && this.gridObj.allowSorting === true) {\n if (!e.target.classList.contains('e-fe-grid-icon')) {\n var direction = !e.target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n var currentField = this.gridObj.getColumnByUid(e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid')).field;\n this.gridObj.sortColumn(currentField, direction);\n if (!isNOU(this.getFocusedItem().nextSibling)) {\n this.getFocusedItem().nextSibling.setAttribute('tabindex', '0');\n }\n }\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\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 {\n this.addHeaderFocus(e);\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 case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\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 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 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 var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\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 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 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 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 (e) {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus;\n if (!isNOU(e.target) && e.target.classList.contains('e-defaultcursor')) {\n this.addFocus(0);\n nameFocus = e.target.nextElementSibling;\n }\n else if (!isNOU(this.gridObj.element.querySelector('.e-focus')) && (this.gridObj.element.querySelector('.e-focus').tagName === 'TH')) {\n nameFocus = this.gridObj.element.querySelector('.e-focus').nextElementSibling;\n this.addFocus(0);\n }\n else {\n nameFocus = select('th.e-fe-grid-icon', this.element);\n }\n if (!isNOU(nameFocus)) {\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 };\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 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 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 DetailsView.prototype.getRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\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 var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\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 var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\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 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 var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["sortComparer","reference","comparer","referenceIsFile","test","comparerIsFile","referenceParts","comparerParts","replace","_","$1","$2","push","Infinity","length","referencePart","shift","comparerPart","comparisonResult","localeCompare","updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","ids","names","isId","el","parentNode","matches","CLS.LIST_ITEM","navigationpaneModule","treeObj","getTreeData","parentText","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","parseInt","toString","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","getAllChildItems","parentId","children","fileSystemData","filter","item","String","allChildren","slice","forEach","child","childId","concat","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","isFileSystemData","itemData","read","events.layoutChange","events.search","searchSettings","filterType","currData","filteredData","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","responseData","error","Search","showHiddenItems","getPathObject","caseSensitive","hiddenItems","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","imgUrl","eventArgs_1","fileDetails","imageUrl","useImageAsUrl","trigger","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","Date","getTime","eventArgs","type","contentType","responseType","JSON","stringify","onSuccess","onFailure","beforeSend","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","isNullOrUndefined","group","sortBy","lists","getObject","feFiles","createEmptyElement","top","layoutElement","select","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","innerHTML","getLocaleText","uploadObj","dropArea","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","createdDate","modifiedDate","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","navData","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","includes","getTargetPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","name_1","dragData","srcData","dragNodes","tempTarget","dropHandler","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","permission","restriction","getAccessClass","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","isFileExists","some","findIndexById","findIndex","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","filterId","createErrorObject","triggerFolderCreation","createEventArgs","folderName","parentFolder","data_1","newObject","triggerDeleteOperation","deleteEventArgs","index","splice","obj","subItem","triggerRenameOperation","renameEventArgs","fileData","oldName","updateChildrenFilterPath","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","target_1","getTargetFiles","currItem","targetItem","subItems","pathArray","updateMovedItemChildren","triggerSearchOperation","searchEventArgs","searchResults","searchText","triggerClientEvents","fn","mode","dataType","beforeSendArgs","events.beforeRequest","idValue","renamedItem","isFileOperation","map","isMultipleFiles","itemNames","totalSize","getSize","reduce","accumulator","currentObject","location","multipleFiles","created","modified","performReadOperation","Ajax","result_1","triggerAjaxFailure","parse","send","toFixed","events.afterRequest","rootAliasName","rootName","location_1","RegExp","match","events.searchTextChange","copiedItems","childItem","events.selectionChanged","pop","handleCatchError","visible","nextElementSibling","createdItem","events.createEnd","Array","isArray","pathObject","pathLevel","renamePath","events.renameEndParent","renameText","previousSelected","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","contentDisposition_1","fileName_1","Fetch","onLoad","e","headers","get","filenameMatch","extractedFilename","blob","blobUrl","URL","createObjectURL","link","href","body","status","triggerFetchSuccess","triggerFetchFailure","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","replaceItems","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","onDeleteSubmit","Internationalization","formatDate","format","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","textContent","which","charCode","createImageDialog","imageData","image","src","alt","fetch_1","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","template","customAttributes","class","initializeCSPTemplate","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","imageEventArgsMap","Map","imageUrlCache","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","imageAttributes","htmlAttributes","itemCreated","onItemCreated","largeIconsTemplate","templateID","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","renderReactTemplates","loadImages","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","_this","imgElement","imageKey","has","imageDetails","set","response","x","z","ondragstart","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","uniqueKey","data-image-key","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","clickObj","Touch","tap","eve","isDevice","tapEvent","doTapAction","originalEvent","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","metaKey","isMacRightClick","cList","addActive","CLS.CHECK","triggerSelection","startIndex","endIndex","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","traverseBackward","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","getPropertyValue","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","renderFileFolderIcons","directoryUpload","menuArgs","fileFolderIcon","isDirectory","isFocused","parentItem","menuType","menuCloseArgs","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","navUid","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","itemsToRemove","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","enable","isUniqueId","validItem","checkValidItem","isTree","getItemData","contextMenuSettings","folder","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","uploadSettings","separator","CLS.TB_OPTION_TICK","CLS.ICON_CUT","CLS.TB_OPTION_DOT","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","File","Folder","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","FolderUpload-Access-Message","FileUpload-Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","onScrollHandler","contextmenuModule","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","adjustHeight","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","splitterAdjust","bar","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","chunkSize","retryCount","uploading","onUploading","chunkUploading","onChunkUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","minFileSize","maxFileSize","allowedExtensions","sequentialUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","allowOrDenyUpload","uploadDetails","hasFolder","f","hasFile","autoClose","onChunkUploadComplete","statusText","onInitialEnd","removeEventListeners","wireSelectOnDragEvent","isBind","viewElem","onDragStart","enableRangeSelection","dragX","pageX","dragY","pageY","dragSelectElement","styles","append","onDragStop","onDrag","stopPropagation","diffX","diffY","setStyleAttribute","Math","abs","dragRect","allItems_1","itemRect","right","bottom","setPath","oldProp","requiresRefresh","ajaxSettingSetModel","localeSetModelOption","col","navigationPaneTemplate","refreshing","CLS.RTL","toolbarModule","disableToolbarItems","enableToolbarItems","enableMenuItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","closeDialog","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","tickIcon","viewText","iconClass","firstChild","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","mergedItems","_match","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","__assign","t","s","n","NavigationPane","removeNodes","moveNames","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","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","nodeTemplate","getDragPath","getDropPath","nodeData","isReact","addChild","prevent","directories","targetDirectory","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","currFiles","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","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","isMultiSelect","Grid","Resize","Sort","VirtualScroll","enablePersistence","gridPersistenceValue","localStorage","getItem","model","sortSettings","setItem","checkNameWidth","getColumns","isValidSortField","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","reactTemplateRender","emptyArgs","pane","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","HiddenName","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","intl","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","getDataRows","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","sortIconElement","gridRecords","getCurrentViewRecords","sRecords","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","filterPathInSettings","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","isShiftPressed","isCtrlPressed","rowIndexes","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","relatedTarget","thElements","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","currentField","getColumnByUid","nextSibling","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tagName","check","getRecords","hasFilter","name_4","dRecords","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}
|