@syncfusion/ej2-filemanager 27.2.5 → 28.1.33
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/README.md +2 -2
- package/dist/ej2-filemanager.min.js +3 -3
- package/dist/ej2-filemanager.umd.min.js +3 -3
- package/dist/ej2-filemanager.umd.min.js.map +1 -1
- package/dist/es6/ej2-filemanager.es2015.js +94 -18
- package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
- package/dist/es6/ej2-filemanager.es5.js +94 -18
- package/dist/es6/ej2-filemanager.es5.js.map +1 -1
- package/dist/global/ej2-filemanager.min.js +3 -3
- package/dist/global/ej2-filemanager.min.js.map +1 -1
- package/dist/global/index.d.ts +2 -2
- package/package.json +16 -16
- package/src/file-manager/base/file-manager-model.d.ts +2 -1
- package/src/file-manager/base/file-manager.d.ts +4 -1
- package/src/file-manager/base/file-manager.js +39 -4
- package/src/file-manager/common/operations.js +7 -4
- package/src/file-manager/common/utility.d.ts +9 -0
- package/src/file-manager/common/utility.js +17 -1
- package/src/file-manager/layout/details-view.js +10 -0
- package/src/file-manager/layout/large-icons-view.js +7 -5
- package/src/file-manager/models/upload-settings-model.d.ts +9 -0
- package/src/file-manager/models/upload-settings.d.ts +8 -0
- package/src/file-manager/models/upload-settings.js +3 -0
- package/src/file-manager/pop-up/context-menu.d.ts +1 -0
- package/src/file-manager/pop-up/context-menu.js +4 -3
- package/src/file-manager/pop-up/dialog.js +8 -2
- package/styles/bds-lite.css +1284 -0
- package/styles/bds-lite.scss +16 -0
- package/styles/bds.css +1876 -0
- package/styles/bds.scss +17 -0
- package/styles/file-manager/_bigger.scss +69 -6
- package/styles/file-manager/_fluent2-definition.scss +1 -1
- package/styles/file-manager/_layout.scss +77 -14
- package/styles/file-manager/_material3-definition.scss +2 -2
- package/styles/file-manager/_tailwind3-definition.scss +243 -0
- package/styles/file-manager/_theme.scss +4 -1
- package/styles/file-manager/bds.css +1876 -0
- package/styles/file-manager/bds.scss +17 -0
- package/styles/file-manager/fluent2.css +2 -2
- package/styles/file-manager/icons/_tailwind3.scss +235 -0
- package/styles/file-manager/material3-dark.css +3 -2
- package/styles/file-manager/material3.css +3 -2
- package/styles/file-manager/tailwind3.css +1666 -0
- package/styles/file-manager/tailwind3.scss +17 -0
- package/styles/fluent2.css +2 -2
- package/styles/material3-dark.css +3 -2
- package/styles/material3.css +3 -2
- package/styles/tailwind3-lite.css +1069 -0
- package/styles/tailwind3-lite.scss +16 -0
- package/styles/tailwind3.css +1666 -0
- package/styles/tailwind3.scss +17 -0
@@ -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) }, true);\n instance.pathId = getPathId(node);\n instance.pathNames = getPathNames(node, text);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId) {\n var matched = getParents(element, text, false, hasId);\n var path = '/';\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 * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node) {\n var matched = getParents(node, node.getAttribute('data-uid'), true);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text) {\n var matched = getParents(element, text, false);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') :\n select('.' + CLS.LIST_TEXT, el).textContent);\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = '/';\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, events.layoutChange, 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 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')) {\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 {string} - returns the image url.\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 };\n parent.trigger('beforeImageLoad', eventArgs_1);\n return eventArgs_1.imageUrl;\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 eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs.imageUrl;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\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.length > 0 ? result[0] : null;\n}\n/**\n * Creates empty element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLElement} element - specifies the element.\n * @param {ReadArgs | SearchArgs} args - specifies the args.\n * @returns {void}\n * @private\n */\nexport function createEmptyElement(parent, element, args) {\n var top;\n var layoutElement = select('#' + parent.element.id + CLS.LAYOUT_ID, parent.element);\n var addressBarHeight = select('#' + parent.element.id + CLS.BREADCRUMBBAR_ID, layoutElement).offsetHeight;\n top = layoutElement.offsetHeight - addressBarHeight;\n if (parent.view === 'Details') {\n top = top - select('.' + CLS.GRID_HEADER, layoutElement).offsetHeight;\n }\n if (isNOU(element.querySelector('.' + CLS.EMPTY))) {\n var emptyDiv = createElement('div', { className: CLS.EMPTY });\n var emptyFolder = createElement('div', { className: CLS.LARGE_EMPTY_FOLDER });\n var emptyEle = createElement('div', { className: CLS.EMPTY_CONTENT });\n var dragFile = createElement('div', { className: CLS.EMPTY_INNER_CONTENT });\n if (parent.view === 'Details') {\n element.querySelector('.' + CLS.GRID_VIEW).appendChild(emptyDiv);\n }\n else {\n element.appendChild(emptyDiv);\n }\n emptyDiv.appendChild(emptyFolder);\n emptyDiv.appendChild(emptyEle);\n emptyDiv.appendChild(dragFile);\n }\n if (element.querySelector('.' + CLS.EMPTY)) {\n if (!isNOU(args.error)) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Access-Denied');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Access-Details');\n }\n else if (parent.isFiltered) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Key');\n }\n else if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Search-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Search-Key');\n }\n else {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Folder-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\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 * @param {Internationalization} localeString - The internationalization object for formatting dates.\n * @param {string} dateFormat - The date format string.\n * @returns {void}\n * @private\n */\nexport function setDateObject(args, localeString, dateFormat) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n if (isNOU(dateFormat)) {\n dateFormat = 'MM/dd/yyyy';\n }\n setValue('_fm_created', localeString.formatDate(createdDate, { format: dateFormat }), args[i]);\n setValue('_fm_modified', localeString.formatDate(modifiedDate, { format: dateFormat }), args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @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 if (!isNullOrUndefined(data)) {\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n parent.pathId.push(id);\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n }\n else {\n parent.originalPath = newPath;\n }\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 = getValue('filterPath', parent.actionRecords[0]).replace(/\\\\/g, '/');\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)) {\n if (fPath === '') {\n return parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + 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 message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\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 * 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, Internationalization } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails } 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 * Function for getDateFormat in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\n if (!columns) {\n return null;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === '_fm_modified') {\n if (!isNOU(columns[i].format)) {\n dateFormat = columns[i].format.toString();\n }\n break;\n }\n }\n return dateFormat;\n}\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 = target.id !== 0 ? 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 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 fileData.name = args.newName;\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 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 = args.targetData;\n var getTargetFiles = filterByParent(parent, target.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.hasChild) {\n target.hasChild = !currItem.isFile;\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;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target.id;\n fileData.filterPath = target.id === 0 ? '\\\\' : target.filterPath + target.name + '\\\\';\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 || (event === 'paste-end' && (parent.targetModule === 'largeiconsview' || parent.targetModule === 'detailsview'))\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) ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: isMultipleFiles ? null : 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 var intl = new Internationalization(parent.locale);\n if (!isNOU(result.files)) {\n setDateObject(result.files, intl, getDateFormat(parent));\n for (var i = 0, len = result.files.length; i < len; i++) {\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\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 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 read(parent, events.renameEndParent, getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/'));\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","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @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 = (parent.activeModule === 'navigationpane') ? getValue('filterPath', parent.itemData[0]).replace(/\\\\/g, '/') : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\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(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"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_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query, 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 } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n this.items = [];\n this.items = this.renderList(args);\n 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) {\n this.parent.virtualizationModule.setUIVirtualization();\n }\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.listElements.setAttribute('aria-label', 'listbox');\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.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.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 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 imgUrl = getImageUrl(this.parent, items[i]);\n setValue('_fm_imageUrl', imgUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem && 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 item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if (e.which === 3 && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.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 && (e.ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (e.ctrlKey && e.shiftKey) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !e.ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey) {\n if (!(e && e.ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var text = getValue('name', details_1);\n if (!_this.parent.isFile) {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imgUrl);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n 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 };\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('data-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n if (!isNOU(uid)) {\n this.parent.navigationpaneModule.treeObj.setProperties({ selectedNodes: [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 for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.parent.navigationpaneModule.treeObj.selectedNodes[0] + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n 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(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n else {\n return -1;\n }\n };\n 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 === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n _this.isMenuItemClicked = true;\n 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 'upload':\n uploadItem(_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 }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.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 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, 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 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 },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n removing: this.onRemoving.bind(this),\n canceling: this.onCancel.bind(this),\n clearing: this.onClearing.bind(this),\n selected: this.onSelected.bind(this),\n success: this.onUploadSuccess.bind(this),\n failure: this.onUploadFailure.bind(this),\n autoUpload: this.uploadSettings.autoUpload,\n minFileSize: this.uploadSettings.minFileSize,\n maxFileSize: this.uploadSettings.maxFileSize,\n allowedExtensions: this.uploadSettings.allowedExtensions,\n directoryUpload: this.uploadSettings.directoryUpload,\n fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n 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 this.uploadDialogObj.show();\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 /* istanbul ignore next */\n FileManager.prototype.onUploadSuccess = function (files) {\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadFailure = function (files) {\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 (!this.viewElem) {\n return;\n }\n if (isBind) {\n if (this.allowMultiSelection) {\n EventHandler.add(this.viewElem, 'mousedown', this.onDragStart, this);\n this.on(events.layoutChange, this.onLayoutChange, this);\n this.on(events.selectionChanged, this.onLayoutChange, this);\n }\n }\n else {\n EventHandler.remove(this.viewElem, 'mousedown', this.onDragStart);\n this.off(events.layoutChange, this.onLayoutChange);\n this.off(events.selectionChanged, this.onLayoutChange);\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 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 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 this.dragSelectedItems = [];\n var dragRect = this.dragSelectElement.getBoundingClientRect();\n var allItems = selectAll(this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-row', this.viewElem);\n removeClass(selectAll('.e-active', this.viewElem), ['e-active', 'e-focus']);\n removeClass(selectAll('.e-check', this.viewElem), ['e-check']);\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 && (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 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 item.querySelector('.e-frame').classList.add('e-check');\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.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 }\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 * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n 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(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","import { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete, 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.expandTree = false;\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies 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: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n 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)) {\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);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n 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) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.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);\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);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.isNodeClickCalled = true;\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n 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 text = getValue('text', args.nodeData);\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? text : id;\n var path = getPath(args.node, newText, isId);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n }\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 this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], !this.expandTree);\n }\n this.expandNodeTarget = '';\n }\n this.expandTree = false;\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.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.expandTree = this.treeObj.expandedNodes.indexOf(this.treeObj.selectedNodes[0]) !== -1;\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n 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 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.hasId) {\n this.parent.isDropEnd = !this.parent.isPasteError;\n readDropPath(this.parent);\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop || isFileSystemData(this.parent) ? this.parent.dragData : this.parent.actionRecords;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n 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 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 this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {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) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n 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)) {\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) ||\n ((this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization &&\n this.element.querySelector('.e-content').scrollTop === 0))) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true && (!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) {\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n 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 }\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 imgUrl = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imgUrl);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath')) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n 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.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 180px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 180px');\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && 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 lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n 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 this.gridObj.getRowByIndex(args.rowIndex).removeAttribute('tabindex');\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n this.gridObj.getRowByIndex(lastItemIndex).querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n 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('data-rowindex'), 10) : 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","parentText","select","CLS.LIST_TEXT","textContent","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","searchSettings","filterType","currData","filteredData","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","Search","events.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","trigger","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","eventArgs","Date","getTime","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","isNullOrUndefined","group","sortBy","lists","getObject","result","feFiles","createEmptyElement","top","layoutElement","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","rootId","dirs","len","setValue","setDateObject","localeString","dateFormat","createdDate","modifiedDate","formatDate","format","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","navData","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","includes","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","navigationpaneModule","treeObj","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","uploadObj","dropArea","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","responseData","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","isFileExists","some","findIndexById","findIndex","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","type","createErrorObject","triggerFolderCreation","createEventArgs","folderName","parentFolder","data_1","newObject","triggerDeleteOperation","deleteEventArgs","index","splice","obj","subItem","triggerRenameOperation","renameEventArgs","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","getTargetFiles","currItem","subItems","parentID","fileData","pathArray","triggerSearchOperation","searchEventArgs","searchResults","searchText","triggerClientEvents","fn","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","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","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","copiedItems","events.selectionChanged","pop","handleCatchError","visible","nextElementSibling","createdItem","events.createEnd","Array","isArray","pathObject","pathLevel","events.renameEndParent","renameText","previousSelected","getTreeData","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","responseType","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","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","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","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","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","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","x","z","ondragstart","_this","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","clickObj","Touch","tap","eve","isDevice","tapEvent","doTapAction","originalEvent","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","cList","addActive","CLS.CHECK","triggerSelection","startIndex","endIndex","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","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","isFocused","parentItem","menuType","menuCloseArgs","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","itemsToRemove","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","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","uploading","onUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","uploadSettings","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","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","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","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","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getDragPath","getDropPath","nodeData","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","checkNameWidth","getColumns","sortSettings","isValidSortField","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enablePersistence","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","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","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","gridRecords","getCurrentViewRecords","sRecords","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","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) }, true);\n instance.pathId = getPathId(node);\n instance.pathNames = getPathNames(node, text);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId) {\n var matched = getParents(element, text, false, hasId);\n var path = '/';\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 * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node) {\n var matched = getParents(node, node.getAttribute('data-uid'), true);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text) {\n var matched = getParents(element, text, false);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') :\n select('.' + CLS.LIST_TEXT, el).textContent);\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = '/';\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, events.layoutChange, 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 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')) {\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 {string} - returns the image url.\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 };\n parent.trigger('beforeImageLoad', eventArgs_1);\n return eventArgs_1.imageUrl;\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 eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs.imageUrl;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\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.length > 0 ? result[0] : null;\n}\n/**\n * Creates empty element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLElement} element - specifies the element.\n * @param {ReadArgs | SearchArgs} args - specifies the args.\n * @returns {void}\n * @private\n */\nexport function createEmptyElement(parent, element, args) {\n var top;\n var layoutElement = select('#' + parent.element.id + CLS.LAYOUT_ID, parent.element);\n var addressBarHeight = select('#' + parent.element.id + CLS.BREADCRUMBBAR_ID, layoutElement).offsetHeight;\n top = layoutElement.offsetHeight - addressBarHeight;\n if (parent.view === 'Details') {\n top = top - select('.' + CLS.GRID_HEADER, layoutElement).offsetHeight;\n }\n if (isNOU(element.querySelector('.' + CLS.EMPTY))) {\n var emptyDiv = createElement('div', { className: CLS.EMPTY });\n var emptyFolder = createElement('div', { className: CLS.LARGE_EMPTY_FOLDER });\n var emptyEle = createElement('div', { className: CLS.EMPTY_CONTENT });\n var dragFile = createElement('div', { className: CLS.EMPTY_INNER_CONTENT });\n if (parent.view === 'Details') {\n element.querySelector('.' + CLS.GRID_VIEW).appendChild(emptyDiv);\n }\n else {\n element.appendChild(emptyDiv);\n }\n emptyDiv.appendChild(emptyFolder);\n emptyDiv.appendChild(emptyEle);\n emptyDiv.appendChild(dragFile);\n }\n if (element.querySelector('.' + CLS.EMPTY)) {\n if (!isNOU(args.error)) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Access-Denied');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Access-Details');\n }\n else if (parent.isFiltered) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Key');\n }\n else if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Search-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Search-Key');\n }\n else {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Folder-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\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 * @param {Internationalization} localeString - The internationalization object for formatting dates.\n * @param {string} dateFormat - The date format string.\n * @returns {void}\n * @private\n */\nexport function setDateObject(args, localeString, dateFormat) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n if (isNOU(dateFormat)) {\n dateFormat = 'MM/dd/yyyy';\n }\n setValue('_fm_created', localeString.formatDate(createdDate, { format: dateFormat }), args[i]);\n setValue('_fm_modified', localeString.formatDate(modifiedDate, { format: dateFormat }), args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @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 if (!isNullOrUndefined(data)) {\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n parent.pathId.push(id);\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n }\n else {\n parent.originalPath = newPath;\n }\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)) {\n if (fPath === '') {\n return parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + 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 message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\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, Internationalization } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, 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 * Function for getDateFormat in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\n if (!columns) {\n return null;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === '_fm_modified') {\n if (!isNOU(columns[i].format)) {\n dateFormat = columns[i].format.toString();\n }\n break;\n }\n }\n return dateFormat;\n}\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 = target.id !== 0 ? 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 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 fileData.name = args.newName;\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 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 = args.targetData;\n var getTargetFiles = filterByParent(parent, target.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.hasChild) {\n target.hasChild = !currItem.isFile;\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;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target.id;\n fileData.filterPath = target.id === 0 ? '\\\\' : target.filterPath + target.name + '\\\\';\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 || (event === 'paste-end' && (parent.targetModule === 'largeiconsview' || parent.targetModule === 'detailsview'))\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 var intl = new Internationalization(parent.locale);\n if (!isNOU(result.files)) {\n setDateObject(result.files, intl, getDateFormat(parent));\n for (var i = 0, len = result.files.length; i < len; i++) {\n 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 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","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass, 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 {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\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(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_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query, 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 } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n this.items = [];\n this.items = this.renderList(args);\n 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) {\n this.parent.virtualizationModule.setUIVirtualization();\n }\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.listElements.setAttribute('aria-label', 'listbox');\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.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.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 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 imgUrl = getImageUrl(this.parent, items[i]);\n setValue('_fm_imageUrl', imgUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem && 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 (e.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 && 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 imgUrl = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imgUrl);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n 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 };\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('data-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n 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 for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.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(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n else {\n return -1;\n }\n };\n 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 === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n _this.isMenuItemClicked = true;\n 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 'upload':\n uploadItem(_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 }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.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 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, 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 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 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 this.uploadDialogObj.show();\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 (!this.viewElem) {\n return;\n }\n if (isBind) {\n if (this.allowMultiSelection) {\n EventHandler.add(this.viewElem, 'mousedown', this.onDragStart, this);\n this.on(events.layoutChange, this.onLayoutChange, this);\n this.on(events.selectionChanged, this.onLayoutChange, this);\n }\n }\n else {\n EventHandler.remove(this.viewElem, 'mousedown', this.onDragStart);\n this.off(events.layoutChange, this.onLayoutChange);\n this.off(events.selectionChanged, this.onLayoutChange);\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 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 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 this.dragSelectedItems = [];\n var dragRect = this.dragSelectElement.getBoundingClientRect();\n var allItems = selectAll(this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-row', this.viewElem);\n removeClass(selectAll('.e-active', this.viewElem), ['e-active', 'e-focus']);\n removeClass(selectAll('.e-check', this.viewElem), ['e-check']);\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 && (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 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 item.querySelector('.e-frame').classList.add('e-check');\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.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 }\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 * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n 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(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","import { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete, 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.expandTree = false;\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies 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: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n 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)) {\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);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n 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) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.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);\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);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.isNodeClickCalled = true;\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n 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 text = getValue('text', args.nodeData);\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? text : id;\n var path = getPath(args.node, newText, isId);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n }\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 this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], !this.expandTree);\n }\n this.expandNodeTarget = '';\n }\n this.expandTree = false;\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.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.expandTree = this.treeObj.expandedNodes.indexOf(this.treeObj.selectedNodes[0]) !== -1;\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n 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 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.hasId) {\n this.parent.isDropEnd = !this.parent.isPasteError;\n readDropPath(this.parent);\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop || isFileSystemData(this.parent) ? this.parent.dragData : this.parent.actionRecords;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n 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 this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {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) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n 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)) {\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) ||\n ((this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization &&\n this.element.querySelector('.e-content').scrollTop === 0))) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true && (!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) {\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n 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 }\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 imgUrl = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imgUrl);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath')) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n 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.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 180px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 180px');\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && 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 lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n 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 this.gridObj.getRowByIndex(args.rowIndex).removeAttribute('tabindex');\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n this.gridObj.getRowByIndex(lastItemIndex).querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n 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('data-rowindex'), 10) : 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","parentText","select","CLS.LIST_TEXT","textContent","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","searchSettings","filterType","currData","filteredData","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","Search","events.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","trigger","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","eventArgs","Date","getTime","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","isNullOrUndefined","group","sortBy","lists","getObject","result","feFiles","createEmptyElement","top","layoutElement","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","rootId","dirs","len","setValue","setDateObject","localeString","dateFormat","createdDate","modifiedDate","formatDate","format","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","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","navigationpaneModule","treeObj","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","uploadObj","dropArea","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","responseData","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","isFileExists","some","findIndexById","findIndex","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","type","createErrorObject","triggerFolderCreation","createEventArgs","folderName","parentFolder","data_1","newObject","triggerDeleteOperation","deleteEventArgs","index","splice","obj","subItem","triggerRenameOperation","renameEventArgs","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","getTargetFiles","currItem","subItems","parentID","fileData","pathArray","triggerSearchOperation","searchEventArgs","searchResults","searchText","triggerClientEvents","fn","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","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","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","copiedItems","events.selectionChanged","pop","handleCatchError","visible","nextElementSibling","createdItem","events.createEnd","Array","isArray","pathObject","pathLevel","renamePath","events.renameEndParent","renameText","previousSelected","getTreeData","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","responseType","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","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","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","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","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","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","x","z","ondragstart","_this","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","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","folder","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","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","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","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","uploadSettings","retryCount","uploading","onUploading","chunkUploading","onChunkUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","onChunkUploadComplete","response","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","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","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","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getDragPath","getDropPath","nodeData","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","isReact","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","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","gridRecords","getCurrentViewRecords","sRecords","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","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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"}
|