@syncfusion/ej2-filemanager 28.2.3 → 28.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ej2-filemanager.min.js +2 -2
- package/dist/ej2-filemanager.umd.min.js +2 -2
- package/dist/ej2-filemanager.umd.min.js.map +1 -1
- package/dist/es6/ej2-filemanager.es2015.js +29 -13
- package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
- package/dist/es6/ej2-filemanager.es5.js +29 -13
- package/dist/es6/ej2-filemanager.es5.js.map +1 -1
- package/dist/global/ej2-filemanager.min.js +2 -2
- package/dist/global/ej2-filemanager.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +9 -9
- package/src/file-manager/base/file-manager.d.ts +7 -0
- package/src/file-manager/base/file-manager.js +12 -1
- package/src/file-manager/base/interface.d.ts +1 -0
- package/src/file-manager/common/utility.js +1 -1
- package/src/file-manager/layout/details-view.js +2 -1
- package/src/file-manager/pop-up/context-menu.d.ts +1 -1
- package/src/file-manager/pop-up/context-menu.js +14 -10
@@ -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 * @returns {void}\n * @private\n */\nexport function setDateObject(args) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n setValue('_fm_created', createdDate, args[i]);\n setValue('_fm_modified', modifiedDate, args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @param {IFileManager} [parent] - optional parameter representing the parent IFileManager.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n var data = getObject(parent, key, folders[parseInt(i.toString(), 10)]);\n 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 } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails, getTargetPath } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) {\n return !isNOU(item) && String(item.id) === String(id);\n });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n 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 if (!isNOU(result.files)) {\n setDateObject(result.files);\n for (var i = 0, len = result.files.length; i < len; i++) {\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n }\n if (location_1.indexOf('\\\\') === -1) {\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function 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","createdDate","modifiedDate","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","navData","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","includes","getTargetPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","name_1","dragData","srcData","dragNodes","tempTarget","dropHandler","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","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","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","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","Internationalization","formatDate","format","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","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","intl","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","getDataRows","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","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, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n else {\n parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;\n var currData = getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n var parentId = getValue('id', currData);\n var filteredData = getAllChildItems(parent, parentId);\n var data = new DataManager(filteredData).\n executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));\n var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;\n parent.itemData = data;\n 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 * @returns {void}\n * @private\n */\nexport function setDateObject(args) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n setValue('_fm_created', createdDate, args[i]);\n setValue('_fm_modified', modifiedDate, args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @param {IFileManager} [parent] - optional parameter representing the parent IFileManager.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n var data = getObject(parent, key, folders[parseInt(i.toString(), 10)]);\n 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 } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails, getTargetPath } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) {\n return !isNOU(item) && String(item.id) === String(id);\n });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n 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 if (!isNOU(result.files)) {\n setDateObject(result.files);\n for (var i = 0, len = result.files.length; i < len; i++) {\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n }\n if (location_1.indexOf('\\\\') === -1) {\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function 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 if (enable) {\n this.disabledItems = this.disabledItems.filter(function (item) { return items.indexOf(item) === -1; });\n }\n for (var i = 0; i < items.length; i++) {\n var validItem = this.checkValidItem(items[i]);\n if (validItem === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (validItem === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.navUid + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (!isNOU(selectedTreeNode) &&\n this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n else {\n var indexToRemove = this.disabledItems.indexOf('Open');\n if (indexToRemove !== -1) {\n this.disabledItems.splice(indexToRemove, 1);\n }\n }\n if (this.parent.selectedItems.length === 0) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n }\n else if (this.parent.activeModule !== 'navigationpane') {\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename', 'Paste');\n }\n }\n };\n ContextMenu.prototype.setFileItem = function () {\n this.menuType = 'file';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.file.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename');\n }\n };\n ContextMenu.prototype.setLayoutItem = function (target) {\n this.menuType = 'layout';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.layout.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (!this.parent.allowMultiSelection || ((this.parent.view === 'LargeIcons' &&\n (closest(target, '#' + this.parent.element.id + CLS.LARGEICON_ID).getElementsByClassName(CLS.EMPTY).length !== 0))\n || (this.parent.view === 'Details' &&\n (closest(target, '#' + this.parent.element.id + CLS.GRID_ID).getElementsByClassName(CLS.EMPTY).length !== 0)))) {\n this.disabledItems.push('SelectAll');\n }\n else {\n this.disabledItems = this.disabledItems.filter(function (item) { return item !== 'SelectAll'; });\n }\n if (this.parent.selectedNodes.length === 0) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(this.currentElement)) {\n if (!isNOU(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n }\n return -1;\n };\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n var args = { target: this.menuTarget };\n this.parent.notify(events.menuItemData, args);\n return this.parent.itemData[0];\n }\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onSelect = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var itemText = args.item.id.substr((this.parent.element.id + '_cm_').length);\n var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === '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 * Enables the specified menu items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.enableItems(items, true, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Specifies the method that must be invoked to traverse the path backwards in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.traverseBackward = function () {\n if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {\n this.pathId.pop();\n this.pathNames.pop();\n var newPath = this.pathNames.slice(1).join('/');\n newPath = newPath === '' ? '/' : '/' + newPath + '/';\n this.setProperties({ path: newPath }, true);\n read(this, events.pathChanged, this.path);\n var treeNodeId = this.pathId[this.pathId.length - 1];\n this.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the method which must be invoked to programmatically close the dialog popup in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.closeDialog = function () {\n closePopup(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property([])\n ], FileManager.prototype, \"fileSystemData\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(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 var filterPathInSettings = this.parent.detailsViewSettings.columns.some(function (col) { return col.field === 'filterPath'; });\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath') && !filterPathInSettings) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.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","events.search","searchSettings","filterType","currData","filteredData","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","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","createdDate","modifiedDate","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","navData","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","includes","getTargetPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","name_1","dragData","srcData","dragNodes","tempTarget","dropHandler","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","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","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","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","Internationalization","formatDate","format","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","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","validItem","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","enableMenuItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","closeDialog","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","tickIcon","viewText","iconClass","firstChild","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","mergedItems","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","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","intl","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","getDataRows","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","filterPathInSettings","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","isShiftPressed","isCtrlPressed","rowIndexes","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","relatedTarget","thElements","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","currentField","getColumnByUid","nextSibling","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tagName","check","getRecords","hasFilter","name_4","dRecords","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}
|