@syncfusion/ej2-filemanager 28.1.36 → 28.1.39
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 +1 -1
- package/dist/ej2-filemanager.min.js +10 -1
- package/dist/ej2-filemanager.umd.min.js +10 -1
- package/dist/ej2-filemanager.umd.min.js.map +1 -1
- package/dist/es6/ej2-filemanager.es2015.js +2 -1
- package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
- package/dist/es6/ej2-filemanager.es5.js +2 -1
- package/dist/es6/ej2-filemanager.es5.js.map +1 -1
- package/dist/global/ej2-filemanager.min.js +10 -1
- package/dist/global/ej2-filemanager.min.js.map +1 -1
- package/dist/global/index.d.ts +9 -0
- package/package.json +11 -10
- package/src/file-manager/layout/navigation-pane.js +2 -1
@@ -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 = 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 '/';\n }\n return fPath.replace(/\\\\/g, '/').replace(/^.*?(?=\\/)/, '') + filePath;\n }\n else {\n return isFileSystemData(parent) ? filePath : parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n parent.trigger('success', { action: operation, result: result });\n if (!parent.isDragDrop || (parent.path === parent.dragPath) || (parent.path === parent.dropPath)\n || parent.isSearchDrag) {\n parent.isPathDrag = false;\n read(parent, events.pasteEnd, parent.path);\n }\n else {\n readDropPath(parent);\n }\n}\n/**\n * Reads the drop path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function readDropPath(parent) {\n var pathId = getValue('_fm_id', parent.dropData);\n parent.expandedId = pathId;\n parent.itemData = [parent.dropData];\n if (parent.isPathDrag) {\n parent.notify(events.pathDrag, parent.itemData);\n }\n else {\n if (parent.navigationpaneModule) {\n var node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n if (!node) {\n var liElement = document.querySelector('[data-id = \"' + getValue('id', parent.dropData) + '\"]');\n pathId = liElement.getAttribute('data-uid');\n node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n }\n updatePath(node, parent.dropData, parent);\n }\n read(parent, events.dropPath, parent.dropPath);\n }\n}\n/**\n * Gets the duplicated path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} name - specifies the name.\n * @returns {object} - returns the duplicated path.\n * @private\n */\nexport function getDuplicateData(parent, name) {\n var data = null;\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Remove item class handler\n *\n * @param {Element} scrollParent - specifies the scrolling target.\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} nodeClass - specifies the node class.\n * @param {number} clientY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the target element.\n * @returns {void}\n * @private\n */\nexport function scrollHandler(scrollParent, parent, nodeClass, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select('.' + nodeClass, scrollParent);\n if ((clientY >= (elementData.top + scrollParent.clientHeight - 30)) && !isNullOrUndefined(node)) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, position);\n }\n if (!isNullOrUndefined(node) && (clientY <= (elementData.top + 30))) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, -position);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n var scrollParent;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n scrollParent = parent.navigationpaneModule.treeObj.element.parentElement;\n scrollHandler(scrollParent, parent, 'e-level-2', args.event.y);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n scrollParent = parent.detailsviewModule.gridObj.element.querySelector('.e-content');\n scrollHandler(scrollParent, parent, 'e-row', args.event.y);\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n scrollParent = parent.largeiconsviewModule.element.firstElementChild;\n scrollHandler(scrollParent, parent, 'e-large-icon', args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\nexport function createDeniedDialog(parent, data, action) {\n var 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 = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n return newItem;\n}\n/**\n * Function to create an error response.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} message - specifies the error message.\n * @param {string} code - specifies the error code.\n * @param {Object[]} fileName - specifies the file name.\n * @returns {void}\n * @private\n */\nfunction createErrorObject(parent, message, code, fileName) {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: code,\n message: message,\n fileExists: fileName != null ? fileName : null\n },\n files: null\n };\n}\n/**\n * Function to trigger folder creation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerFolderCreation(parent, data, eventArgs) {\n var createEventArgs = {\n folderName: getValue('name', data),\n cancel: false,\n path: getValue('path', data),\n parentFolder: getValue('data', data)\n };\n parent.trigger('beforeFolderCreate', createEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.folderName)) {\n var data_1 = args.parentFolder[0];\n var newObject = createNewItem(data_1, data_1, args.folderName, false);\n parent.fileSystemData.push(newObject);\n }\n else {\n var message = 'A file or folder with the name ' + args.folderName + ' already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger delete operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerDeleteOperation(parent, data, eventArgs) {\n var deleteEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeDelete', deleteEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n args.itemData.forEach(function (itemData) {\n var index = findIndexById(parent, itemData.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n if (!itemData.isFile) {\n var subItems = parent.fileSystemData.filter(function (obj) { return obj.filterPath.includes(itemData.name); });\n subItems.forEach(function (subItem) {\n var index = findIndexById(parent, subItem.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n });\n }\n });\n }\n });\n}\n/**\n * Function to trigger rename operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerRenameOperation(parent, data, eventArgs) {\n var renameEventArgs = {\n cancel: false,\n newName: getValue('newName', data),\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeRename', renameEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.newName)) {\n var fileData = filterById(parent, args.itemData[0].id);\n var oldName = fileData.name;\n fileData.name = args.newName;\n updateChildrenFilterPath(parent, fileData.id, oldName, args.newName);\n }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to update child item filter path.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent id.\n * @param {string} oldName - specifies the previous name.\n * @param {string} newName - specifies the new name.\n * @returns {void}\n * @private\n */\nfunction updateChildrenFilterPath(parent, parentId, oldName, newName) {\n parent.fileSystemData.forEach(function (item) {\n if (String(item.parentId) === String(parentId)) {\n var oldPath = item.filterPath;\n var newPath = oldPath.replace(oldName + '\\\\', newName + '\\\\');\n item.filterPath = newPath;\n updateChildrenFilterPath(parent, item.id, oldName, newName);\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target_1 = args.targetData;\n var getTargetFiles = filterByParent(parent, target_1.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target_1.hasChild) {\n target_1.hasChild = !currItem.isFile;\n var targetItem = parent.fileSystemData\n .filter(function (item) { return String(item.id) === String(target_1.id); });\n if (targetItem.length > 0) {\n targetItem[0].hasChild = target_1.hasChild;\n }\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentId) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target_1;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target_1 = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target_1.id;\n fileData.filterPath = target_1.id === 0 ? '\\\\' : target_1.filterPath + target_1.name + '\\\\';\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' || event === 'rename-end-parent'\n ? getValue('path', data) : parent.path;\n var pathArray = filePath.replace(/^\\/|\\/$/g, '').split('/');\n var idValue = event === 'rename-end-parent' || (event === 'path-changed' && getValue('data', data).length !== 0 && isNOU(parent.renamedItem))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n if (action === 'copy') {\n itemData = parent.pasteNodes.map(function (item) { return filterById(parent, item); });\n }\n else {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) || isMultipleFiles ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n 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 if (isFileSystemData(this.parent)) {\n this.moveNames = [];\n var obj = this.parent.dragData;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n }\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop || 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","fileData","oldName","updateChildrenFilterPath","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","target_1","getTargetFiles","currItem","targetItem","subItems","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","parentID","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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"}
|
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 '/';\n }\n return fPath.replace(/\\\\/g, '/').replace(/^.*?(?=\\/)/, '') + filePath;\n }\n else {\n return isFileSystemData(parent) ? filePath : parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n parent.trigger('success', { action: operation, result: result });\n if (!parent.isDragDrop || (parent.path === parent.dragPath) || (parent.path === parent.dropPath)\n || parent.isSearchDrag) {\n parent.isPathDrag = false;\n read(parent, events.pasteEnd, parent.path);\n }\n else {\n readDropPath(parent);\n }\n}\n/**\n * Reads the drop path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function readDropPath(parent) {\n var pathId = getValue('_fm_id', parent.dropData);\n parent.expandedId = pathId;\n parent.itemData = [parent.dropData];\n if (parent.isPathDrag) {\n parent.notify(events.pathDrag, parent.itemData);\n }\n else {\n if (parent.navigationpaneModule) {\n var node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n if (!node) {\n var liElement = document.querySelector('[data-id = \"' + getValue('id', parent.dropData) + '\"]');\n pathId = liElement.getAttribute('data-uid');\n node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n }\n updatePath(node, parent.dropData, parent);\n }\n read(parent, events.dropPath, parent.dropPath);\n }\n}\n/**\n * Gets the duplicated path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} name - specifies the name.\n * @returns {object} - returns the duplicated path.\n * @private\n */\nexport function getDuplicateData(parent, name) {\n var data = null;\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Remove item class handler\n *\n * @param {Element} scrollParent - specifies the scrolling target.\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} nodeClass - specifies the node class.\n * @param {number} clientY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the target element.\n * @returns {void}\n * @private\n */\nexport function scrollHandler(scrollParent, parent, nodeClass, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select('.' + nodeClass, scrollParent);\n if ((clientY >= (elementData.top + scrollParent.clientHeight - 30)) && !isNullOrUndefined(node)) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, position);\n }\n if (!isNullOrUndefined(node) && (clientY <= (elementData.top + 30))) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, -position);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n var scrollParent;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n scrollParent = parent.navigationpaneModule.treeObj.element.parentElement;\n scrollHandler(scrollParent, parent, 'e-level-2', args.event.y);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n scrollParent = parent.detailsviewModule.gridObj.element.querySelector('.e-content');\n scrollHandler(scrollParent, parent, 'e-row', args.event.y);\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n scrollParent = parent.largeiconsviewModule.element.firstElementChild;\n scrollHandler(scrollParent, parent, 'e-large-icon', args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\nexport function createDeniedDialog(parent, data, action) {\n var 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 = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n return newItem;\n}\n/**\n * Function to create an error response.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} message - specifies the error message.\n * @param {string} code - specifies the error code.\n * @param {Object[]} fileName - specifies the file name.\n * @returns {void}\n * @private\n */\nfunction createErrorObject(parent, message, code, fileName) {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: code,\n message: message,\n fileExists: fileName != null ? fileName : null\n },\n files: null\n };\n}\n/**\n * Function to trigger folder creation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerFolderCreation(parent, data, eventArgs) {\n var createEventArgs = {\n folderName: getValue('name', data),\n cancel: false,\n path: getValue('path', data),\n parentFolder: getValue('data', data)\n };\n parent.trigger('beforeFolderCreate', createEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.folderName)) {\n var data_1 = args.parentFolder[0];\n var newObject = createNewItem(data_1, data_1, args.folderName, false);\n parent.fileSystemData.push(newObject);\n }\n else {\n var message = 'A file or folder with the name ' + args.folderName + ' already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger delete operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerDeleteOperation(parent, data, eventArgs) {\n var deleteEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeDelete', deleteEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n args.itemData.forEach(function (itemData) {\n var index = findIndexById(parent, itemData.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n if (!itemData.isFile) {\n var subItems = parent.fileSystemData.filter(function (obj) { return obj.filterPath.includes(itemData.name); });\n subItems.forEach(function (subItem) {\n var index = findIndexById(parent, subItem.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n });\n }\n });\n }\n });\n}\n/**\n * Function to trigger rename operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerRenameOperation(parent, data, eventArgs) {\n var renameEventArgs = {\n cancel: false,\n newName: getValue('newName', data),\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeRename', renameEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.newName)) {\n var fileData = filterById(parent, args.itemData[0].id);\n var oldName = fileData.name;\n fileData.name = args.newName;\n updateChildrenFilterPath(parent, fileData.id, oldName, args.newName);\n }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to update child item filter path.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent id.\n * @param {string} oldName - specifies the previous name.\n * @param {string} newName - specifies the new name.\n * @returns {void}\n * @private\n */\nfunction updateChildrenFilterPath(parent, parentId, oldName, newName) {\n parent.fileSystemData.forEach(function (item) {\n if (String(item.parentId) === String(parentId)) {\n var oldPath = item.filterPath;\n var newPath = oldPath.replace(oldName + '\\\\', newName + '\\\\');\n item.filterPath = newPath;\n updateChildrenFilterPath(parent, item.id, oldName, newName);\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target_1 = args.targetData;\n var getTargetFiles = filterByParent(parent, target_1.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target_1.hasChild) {\n target_1.hasChild = !currItem.isFile;\n var targetItem = parent.fileSystemData\n .filter(function (item) { return String(item.id) === String(target_1.id); });\n if (targetItem.length > 0) {\n targetItem[0].hasChild = target_1.hasChild;\n }\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentId) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target_1;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target_1 = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target_1.id;\n fileData.filterPath = target_1.id === 0 ? '\\\\' : target_1.filterPath + target_1.name + '\\\\';\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' || event === 'rename-end-parent'\n ? getValue('path', data) : parent.path;\n var pathArray = filePath.replace(/^\\/|\\/$/g, '').split('/');\n var idValue = event === 'rename-end-parent' || (event === 'path-changed' && getValue('data', data).length !== 0 && isNOU(parent.renamedItem))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n if (action === 'copy') {\n itemData = parent.pasteNodes.map(function (item) { return filterById(parent, item); });\n }\n else {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) || isMultipleFiles ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n 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 || this.isPathDragged) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.isPathDragged = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.setProperties({ selectedNodes: [node.getAttribute('data-uid')] });\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node);\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 if (isFileSystemData(this.parent)) {\n this.moveNames = [];\n var obj = this.parent.dragData;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n }\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop || 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","fileData","oldName","updateChildrenFilterPath","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","target_1","getTargetFiles","currItem","targetItem","subItems","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","parentID","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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"}
|