@syncfusion/ej2-filemanager 33.1.45 → 33.1.47

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-filemanager.min.js","sources":["../../src/file-manager/common/utility.js","../../src/file-manager/common/operations.js","../../src/file-manager/pop-up/dialog.js","../../src/file-manager/models/ajax-settings.js","../../src/file-manager/models/toolbar-settings.js","../../src/file-manager/models/search-settings.js","../../src/file-manager/models/details-view-settings.js","../../src/file-manager/models/contextMenu-settings.js","../../src/file-manager/models/navigation-pane-settings.js","../../src/file-manager/models/upload-settings.js","../../src/file-manager/models/column.js","../../src/file-manager/base/classes.js","../../src/file-manager/base/constant.js","../../src/file-manager/layout/large-icons-view.js","../../src/file-manager/actions/breadcrumb-bar.js","../../src/file-manager/pop-up/context-menu.js","../../src/file-manager/models/default-locale.js","../../src/file-manager/base/file-manager.js","../../src/file-manager/actions/toolbar.js","../../src/file-manager/actions/virtualization.js","../../src/file-manager/layout/navigation-pane.js","../../src/file-manager/layout/details-view.js","../../src/global.js"],"sourcesContent":["import * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { read, paste, Search, filter, Download, Delete, isFileSystemData } from '../common/operations';\nimport { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, detach } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createDialog } from '../pop-up/dialog';\n/**\n * Utility function to compare two strings in a way similar to Windows Explorer.\n * Files and folders are sorted separately, with folders coming before files.\n *\n * @param {string} reference - The first string to compare. This could be a file or folder name.\n * @param {string} comparer - The second string to compare. This could be a file or folder name.\n * @returns {number} - A negative number if `reference` should come before `comparer`, a positive number if `comparer` should come before `reference`, and 0 if they are considered equal.\n */\nexport function sortComparer(reference, comparer) {\n // Check if reference and comparer are files or folders\n var referenceIsFile = /\\.\\S+/.test(reference);\n var comparerIsFile = /\\.\\S+/.test(comparer);\n // If one is a file and the other is a folder, the folder should come first\n if (referenceIsFile && !comparerIsFile) {\n return 1;\n }\n if (!referenceIsFile && comparerIsFile) {\n return -1;\n }\n var referenceParts = [];\n var comparerParts = [];\n (reference + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { referenceParts.push([$1 || Infinity, $2 || '']); return ''; });\n (comparer + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { comparerParts.push([$1 || Infinity, $2 || '']); return ''; });\n // Compare each part of reference and comparer\n while (referenceParts.length && comparerParts.length) {\n var referencePart = referenceParts.shift();\n var comparerPart = comparerParts.shift();\n if (referencePart && comparerPart) {\n var comparisonResult = referencePart[0] - comparerPart[0] ||\n referencePart[1].localeCompare(comparerPart[1]);\n if (comparisonResult) {\n return comparisonResult;\n }\n }\n }\n return referenceParts.length - comparerParts.length;\n}\n/**\n * Utility file for common actions\n *\n * @param {HTMLLIElement} node - specifies the node.\n * @param {Object} data - specifies the data.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {void}\n * @private\n */\nexport function updatePath(node, data, instance) {\n var text = getValue('name', data);\n var id = node.getAttribute('data-id');\n var newText = isNOU(id) ? text : id;\n instance.setProperties({ path: getPath(node, newText, instance.hasId, instance) }, true);\n instance.pathId = getPathId(node, instance);\n instance.pathNames = getPathNames(node, text, instance);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId, instance) {\n var matched = getParents(element, text, false, hasId, instance);\n var path = '/';\n var len = matched.length - (2);\n for (var i = len; i >= 0; i--) {\n path += matched[i] + '/';\n }\n return path;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} node - specifies the node element.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node, instance) {\n var matched = getParents(node, node.getAttribute('data-uid'), true, false, instance);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text, instance) {\n var matched = getParents(element, text, false, false, instance);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId, instance) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var data = [{}];\n if (!isNOU(instance) && !isNOU(instance.navigationpaneModule) && !isNOU(instance.navigationpaneModule.treeObj)) {\n data = instance.navigationpaneModule.treeObj.getTreeData(el);\n }\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') : getValue('name', data[0]));\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = '/';\n var i = 1;\n for (i; i < parent.pathId.length; i++) {\n var data = getValue(parent.pathId[parseInt(i.toString(), 10)], parent.feParent);\n newPath += getValue(key, data) + '/';\n }\n parent.setProperties({ path: newPath }, true);\n}\n/**\n * Functions for remove active element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function removeActive(parent) {\n if (parent.isCut) {\n removeBlur(parent);\n parent.selectedNodes = [];\n parent.actionRecords = [];\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n }\n}\n/**\n * Selects active element in File Manager\n *\n * @param {string} action - specifies the action.\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns active element.\n * @private\n */\nexport function activeElement(action, parent) {\n parent.isSearchCut = false;\n parent.actionRecords = [];\n parent.activeElements = [];\n parent.notify(events.cutCopyInit, {});\n if (parent.activeElements.length === 0) {\n return false;\n }\n removeBlur(parent);\n var blurEle = parent.activeElements;\n if (parent.activeModule !== 'navigationpane') {\n parent.targetPath = parent.path;\n }\n else {\n parent.targetPath = getParentPath(parent.path);\n }\n var i = 0;\n if (blurEle) {\n getModule(parent, blurEle[0]);\n if (action === 'cut') {\n while (i < blurEle.length) {\n addBlur(blurEle[i]);\n i++;\n }\n }\n }\n i = 0;\n parent.selectedNodes = [];\n parent.enablePaste = true;\n parent.notify(events.showPaste, {});\n while (i < parent.activeRecords.length) {\n parent.actionRecords.push(parent.activeRecords[i]);\n parent.selectedNodes.push(getValue('name', parent.activeRecords[i]));\n i++;\n }\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) &&\n parent.activeModule !== 'navigationpane') {\n parent.selectedNodes = [];\n parent.isSearchCut = true;\n var i_1 = 0;\n while (i_1 < parent.selectedItems.length) {\n parent.selectedNodes.push(parent.selectedItems[i_1]);\n i_1++;\n }\n }\n return true;\n}\n/**\n * Adds blur to the elements\n *\n * @param {Element} nodes - specifies the nodes.\n * @returns {void}\n * @private\n */\nexport function addBlur(nodes) {\n nodes.classList.add(CLS.BLUR);\n}\n/**\n * Removes blur from elements\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} hover - specifies the hover string.\n * @returns {void}\n * @private\n */\nexport function removeBlur(parent, hover) {\n var blurEle = (!hover) ? parent.element.querySelectorAll('.' + CLS.BLUR) :\n parent.element.querySelectorAll('.' + CLS.HOVER);\n var i = 0;\n while (i < blurEle.length) {\n blurEle[i].classList.remove((!hover) ? CLS.BLUR : CLS.HOVER);\n i++;\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getModule(parent, element) {\n if (element) {\n if (element.classList.contains(CLS.ROW)) {\n parent.activeModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICON)) {\n parent.activeModule = 'largeiconsview';\n }\n else {\n parent.activeModule = 'navigationpane';\n }\n }\n}\n/**\n * Get all child items\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent ID.\n * @returns {Object[]} An array of child items\n * @private\n */\nexport function getAllChildItems(parent, parentId) {\n var children = parent.fileSystemData.filter(function (item) {\n return String(item.parentId) === String(parentId);\n });\n var allChildren = children.slice();\n children.forEach(function (child) {\n var childId = child.id;\n allChildren = allChildren.concat(getAllChildItems(parent, childId));\n });\n return allChildren;\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (isFileSystemData(parent)) {\n if (value === '') {\n parent.itemData = parent.fileSystemData;\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n else {\n parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;\n var currData = getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n var parentId = getValue('id', currData);\n var filteredData = getAllChildItems(parent, parentId);\n var data = new DataManager(filteredData).\n executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));\n var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;\n parent.itemData = data;\n parent.responseData.error = null;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchValue, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n return;\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable') || element.classList.contains('e-text-content')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {BeforeImageLoadEventArgs} - returns the eventargs.\n * @private\n */\nexport function getImageUrl(parent, item) {\n var imgUrl = isFileSystemData(parent) ? getValue('imageUrl', item) : '';\n if (isFileSystemData(parent)) {\n var eventArgs_1 = {\n fileDetails: [item],\n imageUrl: imgUrl,\n useImageAsUrl: true\n };\n parent.trigger('beforeImageLoad', eventArgs_1);\n return eventArgs_1;\n }\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var fileName = encodeURIComponent(getValue('name', item));\n var fPath = getValue('filterPath', item);\n if (parent.hasId) {\n var imgId = getValue('id', item);\n imgUrl = baseUrl + pathUrl + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + pathUrl + encodeURIComponent(fPath.replace(/\\\\/g, '/')) + fileName;\n }\n else {\n imgUrl = baseUrl + pathUrl + parent.path + fileName;\n }\n imgUrl = imgUrl + '&time=' + (new Date().getTime()).toString();\n var data = { 'action': 'getImage', 'path': parent.path + fileName, 'id': getValue('id', item) };\n var ajaxSettings = {\n url: baseUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl,\n useImageAsUrl: true,\n ajaxSettings: ajaxSettings\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/').replace(/^.*?(?=\\/)/, '') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\nexport function getName(parent, data) {\n var name = getValue('name', data);\n var fPath = getValue('filterPath', data);\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) && !isNOU(fPath)) {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(parent.path, '') + name;\n }\n return name;\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object[]} items - specifies the item elements.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None' && !isNullOrUndefined(parent.sortOrder)) {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n var lists = new DataManager(items).executeLocal(query);\n return getValue('records', lists);\n}\n/**\n * Gets the data object\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} key - specifies the key.\n * @param {string} value - specifies the value.\n * @returns {Object} - returns the sorted data.\n * @private\n */\nexport function getObject(parent, key, value) {\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var result = currFiles.filter(function (data) { return data[key].toString() === value; });\n return result[0];\n}\n/**\n * Creates empty element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLElement} element - specifies the element.\n * @param {ReadArgs | SearchArgs} args - specifies the args.\n * @returns {void}\n * @private\n */\nexport function createEmptyElement(parent, element, args) {\n var top;\n var layoutElement = select('#' + parent.element.id + CLS.LAYOUT_ID, parent.element);\n var addressBarHeight = select('#' + parent.element.id + CLS.BREADCRUMBBAR_ID, layoutElement).offsetHeight;\n top = layoutElement.offsetHeight - addressBarHeight;\n if (parent.view === 'Details') {\n top = top - select('.' + CLS.GRID_HEADER, layoutElement).offsetHeight;\n }\n if (isNOU(element.querySelector('.' + CLS.EMPTY))) {\n var emptyDiv = createElement('div', { className: CLS.EMPTY });\n var emptyFolder = createElement('div', { className: CLS.LARGE_EMPTY_FOLDER });\n var emptyEle = createElement('div', { className: CLS.EMPTY_CONTENT });\n var dragFile = createElement('div', { className: CLS.EMPTY_INNER_CONTENT });\n if (parent.view === 'Details') {\n element.querySelector('.' + CLS.GRID_VIEW).appendChild(emptyDiv);\n }\n else {\n element.appendChild(emptyDiv);\n }\n emptyDiv.appendChild(emptyFolder);\n emptyDiv.appendChild(emptyEle);\n emptyDiv.appendChild(dragFile);\n }\n if (element.querySelector('.' + CLS.EMPTY)) {\n if (!isNOU(args.error)) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Access-Denied');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Access-Details');\n }\n else if (parent.isFiltered) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Key');\n }\n else if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Search-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Search-Key');\n }\n else {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Folder-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = parent.uploadObj.dropArea == null ? getLocaleText(parent, '') : getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\nexport function getDirectories(files) {\n return new DataManager(files).executeLocal(new Query().where(events.isFile, 'equal', false, false));\n}\n/**\n * set the Node ID\n *\n * @param {ReadArgs} result - specifies the result.\n * @param {string} rootId - specifies the rootId.\n * @returns {void}\n * @private\n */\nexport function setNodeId(result, rootId) {\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @returns {void}\n * @private\n */\nexport function setDateObject(args) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n setValue('_fm_created', createdDate, args[i]);\n setValue('_fm_modified', modifiedDate, args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @param {IFileManager} [parent] - optional parameter representing the parent IFileManager.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n var data = getObject(parent, key, folders[parseInt(i.toString(), 10)]);\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n if (!isNullOrUndefined(id)) {\n parent.pathId.push(id);\n }\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n read(parent, eventName, parent.path);\n break;\n }\n}\n/**\n * Opens the searched folder\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data\n * @returns {void}\n * @private\n */\nexport function openSearchFolder(parent, data) {\n parent.originalPath = getFullPath(parent, data, parent.path);\n var root = getValue(parent.pathId[0], parent.feParent);\n var navData = parent.feParent[getValue('_fm_id', parent.itemData[0])];\n var isRoot = isNullOrUndefined(navData) || getValue('_fm_id', navData) === 'fe_tree';\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n var searchData = getObject(parent, key, isFileSystemData(parent) ? getValue('id', data) : getValue('name', data));\n if (isNullOrUndefined(searchData)) {\n if (!isRoot) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n }\n else {\n setNextPath(parent, parent.path);\n return;\n }\n }\n else {\n var id = getValue('_fm_id', searchData);\n parent.setProperties({ path: parent.originalPath }, true);\n parent.pathId.push(id);\n parent.itemData = [searchData];\n parent.pathNames.push(getValue('name', searchData));\n }\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n if (parent.activeModule === 'navigationpane' && !parent.selectedNodes[0].includes('/')) {\n parent.targetPath = getTargetPath(parent, parent.actionRecords[0]);\n }\n var subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);\n if (!subFolder) {\n if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {\n parent.notify(events.pasteInit, {});\n paste(parent, parent.targetPath, parent.selectedNodes, path, parent.fileAction, [], parent.actionRecords);\n }\n else {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n removeBlur(parent);\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n }\n }\n }\n}\n/**\n * Validates the sub folders\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {'{ [key: string]: Object; }[]'} data - specifies the data.\n * @param {string} dropPath - specifies the drop path.\n * @param {string} dragPath - specifies the drag path.\n * @returns {boolean} - returns the validated sub folder.\n * @private\n */\nexport function validateSubFolder(parent, data, dropPath, dragPath) {\n var subFolder = false;\n for (var i = 0; i < data.length; i++) {\n if (!getValue('isFile', data[i])) {\n var tempTarget = getFullPath(parent, data[i], dragPath);\n if (dropPath.indexOf(tempTarget) === 0) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Sub-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n else {\n var name_1 = parent.dragData[i] ? parent.dragData[i].name : null;\n var srcData = isFileSystemData(parent) ? name_1 : parent.dragNodes[i];\n var len = 0;\n if (srcData) {\n len = srcData.lastIndexOf('/');\n }\n var path = '';\n if (len > 0) {\n path = dragPath + srcData.substring(0, len + 1);\n }\n if (path === dropPath) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n }\n return subFolder;\n}\n/**\n * Validates the drop handler\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function dropHandler(parent) {\n parent.isDragDrop = true;\n if (parent.dragData.length !== 0) {\n parent.dragPath = parent.dragPath.replace(/\\\\/g, '/');\n parent.dropPath = parent.dropPath.replace(/\\\\/g, '/');\n var subFolder = validateSubFolder(parent, parent.dragData, parent.dropPath, parent.dragPath);\n if (!subFolder && (parent.dragPath !== parent.dropPath)) {\n parent.itemData = [parent.dropData];\n paste(parent, parent.dragPath, parent.dragNodes, parent.dropPath, 'move', [], parent.dragData);\n parent.notify(events.pasteInit, {});\n }\n }\n}\n/**\n * Gets the parent path\n *\n * @param {string} oldPath - specifies the old path.\n * @returns {string} - returns the parent path.\n * @private\n */\nexport function getParentPath(oldPath) {\n var path = oldPath.split('/');\n var newPath = path[0] + '/';\n for (var i = 1; i < path.length - 2; i++) {\n newPath += path[i] + '/';\n }\n return newPath;\n}\n/**\n * Gets the directory path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {ReadArgs} args - returns the read arguements.\n * @returns {string} - returns the directory path\n * @private\n */\nexport function getDirectoryPath(parent, args) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', args.cwd) + '/';\n var fPath = getValue(parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath) && isFileSystemData(parent) && fPath !== '' && fPath !== '\\\\') {\n fPath = '\\\\' + args.cwd.parentId + '\\\\';\n }\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return '/';\n }\n return fPath.replace(/\\\\/g, '/').replace(/^.*?(?=\\/)/, '') + filePath;\n }\n else {\n return isFileSystemData(parent) ? filePath : parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n parent.trigger('success', { action: operation, result: result });\n if (!parent.isDragDrop || (parent.path === parent.dragPath) || (parent.path === parent.dropPath)\n || parent.isSearchDrag) {\n parent.isPathDrag = false;\n read(parent, events.pasteEnd, parent.path);\n }\n else {\n readDropPath(parent);\n }\n}\n/**\n * Reads the drop path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function readDropPath(parent) {\n var pathId = getValue('_fm_id', parent.dropData);\n parent.expandedId = pathId;\n parent.itemData = [parent.dropData];\n if (parent.isPathDrag) {\n parent.notify(events.pathDrag, parent.itemData);\n }\n else {\n if (parent.navigationpaneModule) {\n var node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n if (!node) {\n var liElement = document.querySelector('[data-id = \"' + getValue('id', parent.dropData) + '\"]');\n pathId = liElement.getAttribute('data-uid');\n node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n }\n updatePath(node, parent.dropData, parent);\n }\n read(parent, events.dropPath, parent.dropPath);\n }\n}\n/**\n * Gets the duplicated path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} name - specifies the name.\n * @returns {object} - returns the duplicated path.\n * @private\n */\nexport function getDuplicateData(parent, name) {\n var data = null;\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Remove item class handler\n *\n * @param {Element} scrollParent - specifies the scrolling target.\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} nodeClass - specifies the node class.\n * @param {number} clientY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the target element.\n * @returns {void}\n * @private\n */\nexport function scrollHandler(scrollParent, parent, nodeClass, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select('.' + nodeClass, scrollParent);\n if ((clientY >= (elementData.top + scrollParent.clientHeight - 30)) && !isNullOrUndefined(node)) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, position);\n }\n if (!isNullOrUndefined(node) && (clientY <= (elementData.top + 30))) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, -position);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n var scrollParent;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n scrollParent = parent.navigationpaneModule.treeObj.element.parentElement;\n scrollHandler(scrollParent, parent, 'e-level-2', args.event.y);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n scrollParent = parent.detailsviewModule.gridObj.element.querySelector('.e-content');\n scrollHandler(scrollParent, parent, 'e-row', args.event.y);\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n scrollParent = parent.largeiconsviewModule.element.firstElementChild;\n scrollHandler(scrollParent, parent, 'e-large-icon', args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\nexport function createDeniedDialog(parent, data, action) {\n var permission = getValue('permission', data);\n var message = getValue('message', permission);\n var restriction = getValue('uploadContentFilter', permission) === 1 ? 'Folder Upload' : 'File Upload';\n if (message === '') {\n if (!isNOU(permission) && getValue('upload', permission) && getValue('uploadContentFilter', permission) === 1) {\n message = getLocaleText(parent, 'FolderUpload-Access-Message').replace('{0}', getValue('name', data)).replace('{1}', restriction);\n }\n else if (!isNOU(permission) && getValue('upload', permission) && getValue('uploadContentFilter', permission) === 2) {\n message = getLocaleText(parent, 'FileUpload-Access-Message').replace('{0}', getValue('name', data)).replace('{1}', restriction);\n }\n else {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\nexport function hasReadAccess(data) {\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\nexport function hasEditAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\nexport function hasContentAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\nexport function hasUploadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\nexport function hasDownloadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n/**\n * Close dialog popup handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function closePopup(parent) {\n if (!isNullOrUndefined(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n}\n/**\n * Get target path from item data.\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} itemData - specifies the item elements.\n * @returns {string} returns the path.\n * @private\n */\nexport function getTargetPath(parent, itemData) {\n if (parent.hasId && !isNOU(getValue('filterId', itemData))) {\n return getValue('filterId', itemData).replace(/\\\\/g, '/').replace(/^[^/]+\\//, '/');\n }\n else {\n return getValue('filterPath', itemData).replace(/\\\\/g, '/');\n }\n}\n/**\n * Access control handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} itemData - specifies the item elements.\n * @param {string} action - specifies the action.\n * @param {boolean} isPathPermision - specifies the path permission.\n * @returns {string} returns the path.\n * @private\n */\nexport function getAccessDetails(parent, itemData, action, isPathPermision) {\n var accessMessage = '';\n for (var i = 0; i < itemData.length; i++) {\n var permission = getValue('permission', itemData[i]);\n if (permission == null) {\n permission = undefined;\n }\n if (isPathPermision) {\n if (permission && (!getValue('read', permission) || !getValue('writeContents', permission))) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', 'writeContents');\n }\n }\n }\n else {\n var copyOrMovePermission = action === 'copy' ? getValue('copy', permission) : getValue('write', permission);\n if (permission && (!getValue('read', permission) || !copyOrMovePermission)) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', action);\n }\n }\n }\n if (accessMessage !== '') {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: '401',\n message: accessMessage,\n fileExists: null\n },\n files: null\n };\n break;\n }\n }\n return accessMessage;\n}\n","import { Ajax, Fetch, createElement, select, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails, getTargetPath } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) {\n return !isNOU(item) && String(item.id) === String(id);\n });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n if (!isNOU(target.filterId)) {\n Object.assign(newItem, {\n filterId: target.filterId + target.id + '/'\n });\n }\n return newItem;\n}\n/**\n * Function to create an error response.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} message - specifies the error message.\n * @param {string} code - specifies the error code.\n * @param {Object[]} fileName - specifies the file name.\n * @returns {void}\n * @private\n */\nfunction createErrorObject(parent, message, code, fileName) {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: code,\n message: message,\n fileExists: fileName != null ? fileName : null\n },\n files: null\n };\n}\n/**\n * Function to trigger folder creation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerFolderCreation(parent, data, eventArgs) {\n var createEventArgs = {\n folderName: getValue('name', data),\n cancel: false,\n path: getValue('path', data),\n parentFolder: getValue('data', data)\n };\n parent.trigger('beforeFolderCreate', createEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.folderName)) {\n var data_1 = args.parentFolder[0];\n var newObject = createNewItem(data_1, data_1, args.folderName, false);\n parent.fileSystemData.push(newObject);\n }\n else {\n var message = 'A file or folder with the name ' + args.folderName + ' already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger delete operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerDeleteOperation(parent, data, eventArgs) {\n var deleteEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeDelete', deleteEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n args.itemData.forEach(function (itemData) {\n var index = findIndexById(parent, itemData.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n if (!itemData.isFile) {\n var subItems = parent.fileSystemData.filter(function (obj) { return obj.filterPath.includes(itemData.name); });\n subItems.forEach(function (subItem) {\n var index = findIndexById(parent, subItem.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n });\n }\n });\n }\n });\n}\n/**\n * Function to trigger rename operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerRenameOperation(parent, data, eventArgs) {\n var renameEventArgs = {\n cancel: false,\n newName: getValue('newName', data),\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeRename', renameEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.newName)) {\n var fileData = filterById(parent, args.itemData[0].id);\n var oldName = fileData.name;\n fileData.name = args.newName;\n updateChildrenFilterPath(parent, fileData.id, oldName, args.newName);\n parent.responseData.error = null;\n }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to update child item filter path.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent id.\n * @param {string} oldName - specifies the previous name.\n * @param {string} newName - specifies the new name.\n * @returns {void}\n * @private\n */\nfunction updateChildrenFilterPath(parent, parentId, oldName, newName) {\n parent.fileSystemData.forEach(function (item) {\n if (String(item.parentId) === String(parentId)) {\n var oldPath = item.filterPath;\n var newPath = oldPath.replace(oldName + '\\\\', newName + '\\\\');\n item.filterPath = newPath;\n updateChildrenFilterPath(parent, item.id, oldName, newName);\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target_1 = args.targetData;\n var getTargetFiles = filterByParent(parent, target_1.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target_1.hasChild) {\n target_1.hasChild = !currItem.isFile;\n var targetItem = parent.fileSystemData\n .filter(function (item) { return String(item.id) === String(target_1.id); });\n if (targetItem.length > 0) {\n targetItem[0].hasChild = target_1.hasChild;\n }\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentId) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target_1;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target_1 = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target_1.id;\n fileData.filterPath = target_1.id === 0 ? '\\\\' : target_1.filterPath + target_1.name + '\\\\';\n if (!isNOU(target_1.filterId)) {\n fileData.filterId = target_1.filterId + target_1.id + '/';\n }\n if (!currItem.isFile) {\n updateMovedItemChildren(parent, fileData);\n }\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' || event === 'rename-end-parent'\n ? getValue('path', data) : parent.path;\n var pathArray = filePath.replace(/^\\/|\\/$/g, '').split('/');\n var idValue = event === 'rename-end-parent' || (event === 'path-changed' && getValue('data', data).length !== 0 && isNOU(parent.renamedItem))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n if (action === 'copy') {\n itemData = parent.pasteNodes.map(function (item) { return filterById(parent, item); });\n }\n else {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) || isMultipleFiles ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n if (!isNOU(result.files)) {\n setDateObject(result.files);\n for (var i = 0, len = result.files.length; i < len; i++) {\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n }\n if (location_1.indexOf('\\\\') === -1) {\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function to move operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} itemData - specifies the data.\n * @returns {void}\n * @private\n */\nfunction updateMovedItemChildren(parent, itemData) {\n var childItems = filterByParent(parent, itemData.id);\n childItems.forEach(function (childItem) {\n childItem.filterPath = itemData.filterPath + itemData.name + '\\\\';\n if (!isNOU(itemData.filterId)) {\n childItem.filterId = itemData.filterId + itemData.id + '/';\n }\n if (!childItem.isFile) {\n updateMovedItemChildren(parent, childItem);\n }\n });\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (!isNOU(result.error) && result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: action, result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, action);\n }\n }\n catch (error) {\n handleCatchError(parent, error, action);\n }\n}\n/* istanbul ignore next */\n/**\n * Function for create success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction createSuccess(parent, result, itemName) {\n try {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = isFileSystemData(parent) ? result.files[result.files.length - 1] : result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var createEventArgs = {\n folderName: itemName,\n path: parent.path,\n parentFolder: parent.itemData\n };\n parent.trigger('folderCreate', createEventArgs);\n var args = { action: 'create', result: result };\n parent.trigger('success', args);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.createEnd, parent.path);\n }\n else {\n if (result.error.code === '400') {\n if (parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#newname', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n else {\n var result_2 = {\n files: null,\n error: {\n code: '400',\n message: getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + itemName + '\"'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result_2);\n }\n var args = { action: 'create', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'create');\n }\n }\n }\n catch (error) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'create');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result) {\n try {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n var renameEventArgs = {\n newName: parent.renamedItem.name,\n itemData: [parent.renamedItem],\n path: parent.path\n };\n parent.trigger('rename', renameEventArgs);\n if (parent.activeModule === 'navigationpane') {\n var pathObject = getPathObject(parent);\n var pathLevel = parent.pathId[parent.pathId.length - 1].split('_').length - 2;\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n var renamePath = getTargetPath(parent, parent.renamedItem);\n read(parent, events.renameEndParent, renamePath);\n if (!isNOU(pathObject) && parent.pathNames.length > 1 && pathLevel <= parent.pathNames.length - 1) {\n parent.pathNames[pathLevel] = parent.renameText;\n if (!parent.hasId) {\n parent.setProperties({ path: \"/\" + parent.pathNames.slice(1).join('/') + \"/\" }, true);\n }\n }\n parent.itemData = parent.navigationpaneModule.previousSelected.length > 0\n ? parent.navigationpaneModule.treeObj.getTreeData(parent.navigationpaneModule.previousSelected[0]) : parent.itemData;\n read(parent, events.pathChanged, parent.path);\n parent.itemData[0] = parent.renamedItem;\n parent.renamedItem = null;\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n }\n catch (error) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n try {\n var moveorcopyEventArgs = {\n itemData: result.files,\n isCopy: operation === 'copy' ? true : false,\n path: path,\n targetData: parent.itemData[0],\n targetPath: parent.path\n };\n parent.trigger('move', moveorcopyEventArgs);\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n }\n catch (error) {\n handleCatchError(parent, error, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n try {\n var deleteEventArgs = {\n itemData: result.files,\n path: path\n };\n parent.trigger('delete', deleteEventArgs);\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n try {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(parent, event, path, searchString, showHiddenItems, caseSensitive) {\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var ajaxSettings = {\n url: downloadUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { data: data, cancel: false, useFormPost: true, ajaxSettings: ajaxSettings };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n if (downloadArgs.useFormPost) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n else {\n try {\n var contentDisposition_1;\n var fileName_1;\n var fetch_1 = new Fetch({\n url: getValue('url', downloadArgs.ajaxSettings),\n type: getValue('type', downloadArgs.ajaxSettings),\n contentType: getValue('contentType', downloadArgs.ajaxSettings),\n responseType: getValue('responseType', downloadArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', downloadArgs.ajaxSettings),\n onLoad: function (e) {\n contentDisposition_1 = e.headers.get('Content-Disposition');\n if (contentDisposition_1) {\n var filenameMatch = contentDisposition_1.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/);\n var extractedFilename = filenameMatch && filenameMatch[1];\n fileName_1 = extractedFilename ? extractedFilename.replace(/['\"]/g, '') : fileName_1;\n }\n else {\n fileName_1 = parent.itemData.length > 1 ? 'files.zip' : getValue('isFile', parent.itemData[0]) ? getValue('name', parent.itemData[0]) : getValue('name', parent.itemData[0]) + '.zip';\n }\n },\n onSuccess: function (e) {\n parent.trigger('success', downloadArgs);\n var blob = e;\n var blobUrl = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.href = blobUrl;\n link.download = fileName_1;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.downloadUrl\n }\n };\n createDialog(parent, 'Error', result);\n parent.trigger('failure', downloadArgs);\n }\n });\n fetch_1.send(JSON.stringify(downloadArgs.data));\n }\n catch (error) {\n handleCatchError(parent, error, 'download');\n }\n }\n }\n });\n}\n/**\n * Function for on catch handler in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {any} error - specifies the catch error.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction handleCatchError(parent, error, action) {\n var errorResult = {\n files: null,\n error: {\n message: error.message,\n fileExists: null\n }\n };\n onFailure(parent, errorResult, action);\n}\n/**\n * Function for trigger Fetch success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @returns {void}\n */\nexport function triggerFetchSuccess(parent, ajaxSettings) {\n parent.notify(events.afterRequest, { action: 'success' });\n if (ajaxSettings && typeof getValue('onSuccess', ajaxSettings) === 'function') {\n getValue('onSuccess', ajaxSettings)();\n }\n}\n/**\n * Function for trigger Fetch failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n */\nexport function triggerFetchFailure(parent, ajaxSettings, result) {\n parent.notify(events.afterRequest, { action: 'failure' });\n createDialog(parent, 'Error', result);\n if (typeof getValue('onFailure', ajaxSettings) === 'function') {\n getValue('onFailure', ajaxSettings)();\n }\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization, Fetch } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass, getTargetPath } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details) {\n var options = getOptions(parent, text, e, details);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n if (dialogName !== 'Duplicate Items') {\n parent.restoreFocus();\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 {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n var index;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index = val.name.indexOf('.') + 1;\n return (index === 0 && (!val.isFile)) ? 'Folder' : ((index !== 0) ? val.name.substr(index).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] === undefined) {\n strArr = details.name.split(',').map(function (val) {\n index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = '';\n if (parent.activeModule === 'navigationpane') {\n newPath = getTargetPath(parent, parent.itemData[0]);\n }\n else {\n newPath = parent.path;\n }\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {BeforeImageLoadEventArgs} imageData - specifies the image eventargs.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageData) {\n var content = createElement('div', { className: 'e-image-wrap' });\n if (imageData.useImageAsUrl) {\n var image = createElement('img', { className: 'e-image', attrs: { src: imageData.imageUrl, alt: header } });\n content.appendChild(image);\n }\n else {\n var fetch_1 = new Fetch({\n url: getValue('url', imageData.ajaxSettings),\n type: getValue('type', imageData.ajaxSettings),\n contentType: getValue('contentType', imageData.ajaxSettings),\n responseType: getValue('responseType', imageData.ajaxSettings),\n beforeSend: getValue('beforeSend', imageData.ajaxSettings),\n onSuccess: function (e) {\n var blobUrl = URL.createObjectURL(e);\n var image = createElement('img', { className: 'e-image', attrs: { src: blobUrl, alt: header } });\n content.appendChild(image);\n triggerFetchSuccess(parent, imageData.ajaxSettings);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + getValue('url', imageData.ajaxSettings)\n }\n };\n triggerFetchFailure(parent, imageData.ajaxSettings, result);\n }\n });\n var data = getValue('data', imageData.ajaxSettings);\n fetch_1.send(data);\n }\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\n template: '<span class=\"e-fe-text\">${name}</span>',\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"sequentialUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"chunkSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_FOLDER = 'e-icons e-folder';\n/** @hidden */\nexport var ICON_FILE = 'e-icons e-file-format';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable, Fetch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout, getLocaleText } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.imageEventArgsMap = new Map();\n this.imageUrlCache = new Map();\n this.nextFocusIndex = null;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', imageAttributes: '_fm_imageAttr', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n if (this.parent.largeIconsTemplate) {\n this.listObj.template = this.parent.largeIconsTemplate;\n this.listObj.templateID = this.parent.element.id + '_largeIconsTemplate';\n }\n this.items = [];\n this.items = this.renderList(args);\n if (this.parent.sortComparer && this.parent.sortBy !== 'None') {\n this.items = this.allItems = DataUtil.sort(this.items, this.parent.sortBy, this.comparer.bind(this));\n }\n else {\n this.items = this.allItems = getSortedData(this.parent, this.items);\n }\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0 && !isNOU(this.parent.virtualizationModule)) {\n this.parent.virtualizationModule.setUIVirtualization();\n }\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj, null, null, this.parent);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.parent.renderReactTemplates();\n if (this.imageEventArgsMap.size > 0) {\n this.loadImages();\n }\n this.listElements.setAttribute('aria-label', 'listbox');\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0 && !isNOU(this.parent.virtualizationModule)) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.loadImages = function () {\n var _this = this;\n var imageEle = this.parent.element.querySelectorAll('.e-list-img');\n imageEle.forEach(function (imgElement) {\n var imageKey = imgElement.getAttribute('data-image-key');\n if (!imageKey) {\n return;\n }\n if (_this.imageUrlCache.has(imageKey)) {\n imgElement.setAttribute('src', _this.imageUrlCache.get(imageKey));\n imgElement.classList.remove('image-blur');\n return;\n }\n var imageDetails = _this.imageEventArgsMap.get(imageKey);\n if (!imageDetails) {\n return;\n }\n var fetch = new Fetch({\n url: getValue('url', imageDetails.ajaxSettings),\n type: getValue('type', imageDetails.ajaxSettings),\n contentType: getValue('contentType', imageDetails.ajaxSettings),\n responseType: getValue('responseType', imageDetails.ajaxSettings),\n beforeSend: getValue('beforeSend', imageDetails.ajaxSettings),\n onSuccess: function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n _this.imageUrlCache.set(imageKey, blobUrl);\n imgElement.setAttribute('src', blobUrl);\n imgElement.classList.remove('image-blur');\n triggerFetchSuccess(_this.parent, imageDetails.ajaxSettings);\n },\n onFailure: function (response) {\n var result = {\n files: null,\n error: {\n code: response.status ? response.status.toString() : '404',\n message: getLocaleText(_this.parent, 'Network-Error') + ' ' + getValue('url', imageDetails.ajaxSettings),\n fileExists: null\n }\n };\n triggerFetchFailure(_this.parent, imageDetails.ajaxSettings, result);\n }\n });\n fetch.send(getValue('data', imageDetails.ajaxSettings));\n });\n };\n LargeIconsView.prototype.comparer = function (x, y) {\n if (this.parent.sortOrder === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return this.parent.sortComparer(x, y);\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: false,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.dragData.push(this.getItemObject(activeEle[parseInt(i.toString(), 10)]));\n this.parent.activeElements.push(activeEle[i]);\n }\n getModule(this.parent, dragLi);\n this.parent.dragPath = this.parent.path;\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n LargeIconsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, '.e-list-item');\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n var info = this.getItemObject(dropLi);\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n else {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n LargeIconsView.prototype.getModuleName = function () {\n return 'largeiconsview';\n };\n LargeIconsView.prototype.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.largeIconsTemplate) {\n if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n if (txt.indexOf(type) !== -1) {\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n }\n this.renderCheckbox(args);\n }\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imageData = getImageUrl(this.parent, items[i]);\n if (imageData.useImageAsUrl) {\n setValue('_fm_imageUrl', imageData.imageUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n var uniqueKey = \"img_\" + name_1 + \"_\" + i;\n this.imageEventArgsMap.set(uniqueKey, imageData);\n setValue('_fm_imageUrl', '', items[i]);\n setValue('_fm_imageAttr', { alt: name_1, class: 'e-list-img image-blur', 'data-image-key': uniqueKey }, items[i]);\n }\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n var activeItem = this.getFocusedItem() || this.getActiveItem();\n if (activeItem) {\n var index = this.itemList.indexOf(activeItem);\n if (index !== -1) {\n this.nextFocusIndex = index;\n }\n }\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 if (typeof this.nextFocusIndex === 'number') {\n var items = this.element.querySelectorAll('li.e-list-item');\n if (items.length > 0) {\n var focusIndex = this.nextFocusIndex >= items.length\n ? (this.nextFocusIndex === items.length ? items.length - 1 : 0) : this.nextFocusIndex;\n // eslint-disable-next-line security/detect-object-injection\n this.addFocus(items[focusIndex]);\n }\n this.nextFocusIndex = null;\n }\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 var mappedItem = null;\n if (this.parent._lastFocused && this.parent.pathId && this.parent.pathId.length && this.items && this.itemList) {\n var key = this.parent.pathId[this.parent.pathId.length - 1];\n // eslint-disable-next-line security/detect-object-injection\n var mappedId = this.parent._lastFocused[key];\n if (mappedId) {\n var foundIndex = -1;\n for (var i = 0; i < this.items.length; i++) {\n // eslint-disable-next-line security/detect-object-injection\n if (getValue('_fm_id', this.items[i]) === mappedId || (this.parent.hasId && getValue('id', this.items[i]) === mappedId) || getValue('name', this.items[i]) === mappedId) {\n foundIndex = i;\n break;\n }\n }\n // eslint-disable-next-line security/detect-object-injection\n if (foundIndex > -1 && this.itemList[foundIndex]) {\n mappedItem = this.itemList[foundIndex];\n }\n }\n }\n var targetItem = this.getFocusedItem() || mappedItem || this.parent.visitedItem || this.getFirstItem();\n if (targetItem) {\n this.addFocus(targetItem);\n }\n }\n };\n LargeIconsView.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'largeiconsview') {\n this.doOpenAction(args.target);\n }\n };\n LargeIconsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'LargeIcons' && this.element) {\n this.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n LargeIconsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.startItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n var eveArgs = { ctrlKey: true, shiftKey: true };\n this.doSelection(lastItem, eveArgs);\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.clearSelection();\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n LargeIconsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onSearch = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n this.parent.searchedItems = args.files;\n this.onLayoutChange(args);\n }\n };\n LargeIconsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n };\n LargeIconsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.updateSelectedData();\n };\n LargeIconsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'LargeIcons' && !isNOU(this.listObj) &&\n this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered\n && this.parent.sortBy === 'filterPath') {\n this.parent.sortBy = 'name';\n this.parent.notify(events.sortByChange, {});\n }\n };\n LargeIconsView.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.search, this.onSearch);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.splitterResize, this.splitterResizeHandler);\n this.parent.off(events.resizeEnd, this.resizeHandler);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n this.parent.off(events.filterEnd, this.onPathChanged);\n };\n LargeIconsView.prototype.addEventListener = function () {\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.search, this.onSearch, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.splitterResize, this.splitterResizeHandler, this);\n this.parent.on(events.resizeEnd, this.resizeHandler, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n };\n LargeIconsView.prototype.onActionFailure = function () { this.isInteraction = true; this.isInteracted = true; };\n LargeIconsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var ele = closest(args.target, 'li');\n this.parent.itemData = [this.getItemObject(ele)];\n }\n };\n LargeIconsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.updateSelectedData();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n LargeIconsView.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath === '') ? [getPathObject(this.parent)] :\n [this.getItemObject(select('.e-active', this.element))];\n }\n };\n LargeIconsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeRecords = [];\n this.parent.activeElements = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.activeElements.push(activeEle[i]);\n this.parent.activeRecords.push(this.getItemObject(activeEle[i]));\n }\n }\n };\n LargeIconsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n LargeIconsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n LargeIconsView.prototype.onPropertyChanged = function (e) {\n var currentSelected;\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'selectedItems':\n this.isInteraction = false;\n this.isInteracted = false;\n currentSelected = isNOU(this.parent.selectedItems) ? [] : this.parent.selectedItems.slice(0);\n currentSelected = this.parent.allowMultiSelection ? currentSelected :\n currentSelected.slice(currentSelected.length - 1);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onClearAllInit();\n if (currentSelected.length) {\n this.selectItems(currentSelected);\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n this.isInteraction = true;\n this.isInteracted = true;\n break;\n case 'showThumbnail':\n refresh(this.parent);\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n case 'showItemCheckBoxes':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n if (_this.parent.isDevice) {\n _this.tapCount = eve.tapCount;\n _this.tapEvent = eve;\n setTimeout(function () {\n if (_this.tapCount > 0) {\n _this.doTapAction(_this.tapEvent);\n }\n _this.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n _this.dblClickHandler(eve);\n }\n else {\n _this.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n _this.multiSelect = _this.parent.allowMultiSelection ? true : false;\n if (_this.parent.allowMultiSelection) {\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n _this.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var ctrlKey = this.parent.isMac ? e.metaKey : e.ctrlKey;\n var isMacRightClick = this.parent.isMac && e.ctrlKey && e.shiftKey;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if ((e.which === 3 || isMacRightClick) && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.addActive(item);\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (ctrlKey && e.shiftKey && !isMacRightClick) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey && !isMacRightClick) {\n if (!(e && ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n var _a;\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 if (_this.parent.pathId && _this.parent.pathId.length) {\n _this.parent._lastFocused = Object.assign(_this.parent._lastFocused || {}, (_a = {}, _a[_this.parent.pathId[_this.parent.pathId.length - 1]] = getValue('_fm_id', details_1) || getValue('id', details_1) || text, _a));\n }\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imageData = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imageData);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n this.parent.isFile = getValue('isFile', this.getItemObject(item));\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n /**\n *\n * Gets the currently focused item element in the large icon view.\n *\n * @returns {Element} - The DOM element of the focused item, or null if none is focused.\n * @hidden\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 /**\n *\n * Gets the first item element in the large icon view.\n *\n * @returns {Element} - The DOM element representing the first item in the list.\n * @hidden\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 /**\n *\n * Adds focus to the specified item element in the large icon view.\n *\n * @param {Element} item - The DOM element representing the item to focus.\n * @returns {void} - If null or invalid, no focus is applied.\n * @hidden\n */\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.splitterResizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.getItemCount = function () {\n var perRow = 1;\n if (this.itemList) {\n for (var i = 0, len = this.itemList.length - 1; i < len; i++) {\n if (this.itemList[i].getBoundingClientRect().top === this.itemList[i + 1].getBoundingClientRect().top) {\n perRow++;\n }\n else {\n break;\n }\n }\n }\n this.perRow = perRow;\n };\n LargeIconsView.prototype.triggerSelection = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null\n : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data\n : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n LargeIconsView.prototype.addSelection = function (data) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var newData = new DataManager(this.items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (newData.length > 0) {\n resultData = new DataManager(newData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n var index = this.items.indexOf(resultData[0]);\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[index], eveArgs);\n }\n };\n LargeIconsView.prototype.updateSelectedData = function () {\n var data = [];\n var items = selectAll('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n for (var i = 0; i < items.length; i++) {\n data[i] = this.getItemObject(items[i]);\n }\n this.parent.itemData = data;\n };\n LargeIconsView.prototype.onMethodCall = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n var action = getValue('action', args);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', args));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', args));\n break;\n case 'openFile':\n this.openFile(getValue('id', args));\n break;\n case 'renameFile':\n this.isInteraction = false;\n this.isInteracted = false;\n this.renameFile(getValue('id', args), getValue('newName', args));\n break;\n case 'createFolder':\n this.isInteraction = false;\n this.isInteracted = false;\n break;\n case 'clearSelection':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onClearAllInit();\n break;\n case 'selectAll':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onSelectAllInit();\n break;\n }\n };\n LargeIconsView.prototype.getItemsIndex = function (items) {\n var indexes = [];\n var isFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filterName = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !isFilter) {\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filterName, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n }\n else {\n for (var i = 0, len = this.items.length; i < len; i++) {\n var name_2 = getValue('filterPath', this.items[i]) + getValue('name', this.items[i]);\n if ((items.indexOf(name_2) !== -1) || (items.indexOf(getValue(filterName, this.items[i])) !== -1)) {\n indexes.push(i);\n }\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var indexes = this.getItemsIndex(ids);\n if (indexes.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < indexes.length; i++) {\n data[i] = this.items[indexes[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var index = this.getItemsIndex(ids);\n if (index.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < index.length; i++) {\n data[i] = this.items[index[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n this.doOpenAction(this.itemList[indexes[0]]);\n }\n };\n LargeIconsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n updateRenamingData(this.parent, this.items[indexes[0]]);\n if (isNOU(name)) {\n doRename(this.parent);\n }\n else {\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n rename(this.parent, this.parent.path, name);\n }\n }\n }\n };\n return LargeIconsView;\n}());\nexport { LargeIconsView };\n","import { EventHandler, closest, isNullOrUndefined, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, addClass, removeClass, remove, createElement } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { read } from '../common/operations';\nimport { getLocaleText, searchWordHandler } from '../common/utility';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * BreadCrumbBar module\n */\nvar BreadCrumbBar = /** @class */ (function () {\n /**\n * constructor for addressbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies parent element.\n * @private\n *\n */\n function BreadCrumbBar(parent) {\n this.addressPath = '';\n this.addressBarLink = '';\n this.searchTimer = null;\n this.searchWrapWidth = null;\n this.parent = parent;\n this.keyConfigs = {\n enter: 'enter'\n };\n this.render();\n }\n BreadCrumbBar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var value = e.newProp.searchSettings;\n switch (prop) {\n case 'searchSettings':\n if (!isNullOrUndefined(value.allowSearchOnTyping)) {\n this.searchEventBind(value.allowSearchOnTyping);\n }\n if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&\n !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&\n isNullOrUndefined(value.ignoreCase))) {\n searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);\n }\n break;\n }\n }\n };\n BreadCrumbBar.prototype.render = function () {\n this.addEventListener();\n };\n BreadCrumbBar.prototype.onPathChange = function () {\n var pathNames = this.parent.pathNames;\n var paths = this.parent.path.split('/');\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var addressbarLI = null;\n var pathNamesLen = pathNames.length;\n if (pathNames.length > 0) {\n var id = '';\n for (var i = 0; i < pathNamesLen; i++) {\n var addressATag = null;\n addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });\n for (var j = 0; j <= i; j++) {\n id = id + paths[j] + '/';\n }\n addressbarLI.setAttribute('data-utext', id);\n if (i !== 0) {\n var icon = createElement('span', { className: CLS.ICONS });\n addressbarLI.appendChild(icon);\n }\n if (pathNamesLen - i !== 1) {\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressbarLI.setAttribute('tabindex', '0');\n }\n else {\n addressATag = createElement('span', { className: CLS.LIST_TEXT });\n }\n id = '';\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('fileupload')) {\n this.renderFileFolderIcons(args, CLS.ICON_FILE, !this.parent.uploadObj.directoryUpload);\n }\n if (args.item.id === this.getMenuId('folderupload')) {\n this.renderFileFolderIcons(args, CLS.ICON_FOLDER, this.parent.uploadObj.directoryUpload);\n }\n };\n ContextMenu.prototype.renderFileFolderIcons = function (menuArgs, fileFolderIcon, isDirectory) {\n var iconSpan = createElement('span');\n var element = menuArgs.element;\n element.insertBefore(iconSpan, isDirectory ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', fileFolderIcon + ' ' + CLS.MENU_ICON);\n };\n ContextMenu.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: false,\n element: args.element,\n event: args.event,\n isFocused: args.isFocused,\n fileDetails: [this.menuItemData],\n items: args.items,\n parentItem: args.parentItem,\n menuType: this.menuType\n };\n this.parent.trigger('menuClose', eventArgs, function (menuCloseArgs) {\n if (menuCloseArgs.cancel) {\n args.cancel = menuCloseArgs.cancel;\n return;\n }\n });\n if (!this.isMenuItemClicked && this.menuTarget) {\n this.parent.restoreFocus();\n }\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule === 'navigationpane') {\n this.parent.pathId.pop();\n var parentKey = [];\n var itemKeys = Object.keys(this.parent.feParent);\n for (var _i = 0, itemKeys_1 = itemKeys; _i < itemKeys_1.length; _i++) {\n var item = itemKeys_1[_i];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var itemData = getValue(item, this.parent.feParent);\n if (this.parent.pathNames.indexOf(itemData.name) !== -1) {\n parentKey.push(itemData._fm_id);\n }\n }\n this.parent.pathId.push(parentKey[parentKey.length - 1]);\n this.parent.navigationpaneModule.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n var selected = false;\n var uid;\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest('div');\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('aria-rowindex'), 10) - 1]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n if (!isNOU(uid)) {\n this.navUid = uid;\n }\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n else {\n var itemsToRemove = ['Delete', 'Rename', 'Cut', 'Copy'];\n for (var i = 0; i < this.disabledItems.length; i++) {\n var item = this.disabledItems[i];\n if (itemsToRemove.indexOf(item) !== -1) {\n this.disabledItems.splice(i, 1);\n i--;\n }\n }\n }\n /* istanbul ignore next */\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n else {\n var pasteIndex = this.disabledItems.indexOf('Paste');\n if (pasteIndex !== -1) {\n this.disabledItems.splice(pasteIndex, 1);\n }\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n if (enable) {\n this.disabledItems = this.disabledItems.filter(function (item) { return items.indexOf(item) === -1; });\n }\n for (var i = 0; i < items.length; i++) {\n var validItem = this.checkValidItem(items[i]);\n if (validItem === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (validItem === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.navUid + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (!isNOU(selectedTreeNode) &&\n this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n else {\n var indexToRemove = this.disabledItems.indexOf('Open');\n if (indexToRemove !== -1) {\n this.disabledItems.splice(indexToRemove, 1);\n }\n }\n if (this.parent.selectedItems.length === 0) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n }\n else if (this.parent.activeModule !== 'navigationpane') {\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename', 'Paste');\n }\n }\n };\n ContextMenu.prototype.setFileItem = function () {\n this.menuType = 'file';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.file.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename');\n }\n };\n ContextMenu.prototype.setLayoutItem = function (target) {\n this.menuType = 'layout';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.layout.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (!this.parent.allowMultiSelection || ((this.parent.view === 'LargeIcons' &&\n (closest(target, '#' + this.parent.element.id + CLS.LARGEICON_ID).getElementsByClassName(CLS.EMPTY).length !== 0))\n || (this.parent.view === 'Details' &&\n (closest(target, '#' + this.parent.element.id + CLS.GRID_ID).getElementsByClassName(CLS.EMPTY).length !== 0)))) {\n this.disabledItems.push('SelectAll');\n }\n else {\n this.disabledItems = this.disabledItems.filter(function (item) { return item !== 'SelectAll'; });\n }\n if (this.parent.selectedNodes.length === 0) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(this.currentElement)) {\n if (!isNOU(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n }\n return -1;\n };\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n var args = { target: this.menuTarget };\n this.parent.notify(events.menuItemData, args);\n return this.parent.itemData[0];\n }\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onSelect = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var itemText = args.item.id.substr((this.parent.element.id + '_cm_').length);\n var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'fileupload' || itemText === 'folderupload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n if (itemText !== 'cut' && itemText !== 'copy') {\n _this.isMenuItemClicked = true;\n }\n switch (itemText) {\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'paste':\n if (_this.menuType === 'folder') {\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n _this.parent.folderPath = _this.parent.path;\n }\n else {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'name':\n case 'size':\n case 'date':\n case 'ascending':\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n case 'fileupload':\n case 'folderupload':\n _this.parent.setProperties({ uploadSettings: { directoryUpload: itemText === 'fileupload' ? false : true } });\n _this.parent.dataBind();\n uploadItem(_this.parent);\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD,\n items: [\n {\n id: this.getMenuId('folderupload'), text: getLocaleText(this.parent, 'Folder'),\n iconCss: !this.parent.uploadObj.directoryUpload ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('fileupload'), text: getLocaleText(this.parent, 'File'),\n iconCss: this.parent.uploadObj.directoryUpload ? null : CLS.TB_OPTION_TICK\n }\n ]\n };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.split(' ').join('').toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'File': 'File',\n 'Folder': 'Folder',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'FolderUpload-Access-Message': '{0} is not accessible. you need permission to perform the {1} action.',\n 'FileUpload-Access-Message': '{0} is not accessible. you need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, detach, selectAll, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem, closePopup } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.existingFileCount = 0;\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not\n _this.isMac = false;\n _this.dragSelectedItems = [];\n _this.onScrollHandler = function () {\n if (!isNOU(_this.contextmenuModule) && !isNOU(_this.contextmenuModule.contextMenu)) {\n _this.contextmenuModule.contextMenu.close();\n }\n };\n FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);\n return _this;\n }\n FileManager_1 = FileManager;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n FileManager.prototype.getModuleName = function () {\n return 'filemanager';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n FileManager.prototype.preRender = function () {\n if (isNOU(this.element.id) || this.element.id === '') {\n this.element.setAttribute('id', getUniqueID('filemanager'));\n }\n this.ensurePath();\n this.feParent = [];\n this.feFiles = [];\n setAttr(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.isDevice = Browser.isDevice;\n this.isMobile = this.checkMobile();\n if (this.isMobile) {\n this.setProperties({ navigationPaneSettings: { visible: false } }, true);\n }\n var ele = closest(this.element, '.e-bigger');\n this.isBigger = ele ? true : false;\n this.activeModule = (this.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n createSpinner({ target: this.element }, createElement);\n this.addWrapper();\n this.keyConfigs = {\n altN: 'alt+n',\n f5: 'f5',\n ctrlShift1: 'ctrl+shift+1',\n ctrlShift2: 'ctrl+shift+2',\n ctrlU: 'ctrl+u'\n };\n this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale);\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string} - returns the persisted data.\n * @hidden\n */\n FileManager.prototype.getPersistData = function () {\n var keyEntity = ['view', 'path', 'selectedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n FileManager.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'breadcrumbbar',\n args: [this]\n });\n modules.push({\n member: 'largeiconsview',\n args: [this]\n });\n if (this.toolbarSettings.visible) {\n modules.push({\n member: 'toolbar',\n args: [this],\n name: 'Toolbar'\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this],\n name: 'NavigationPane'\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this],\n name: 'DetailsView'\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this],\n name: 'ContextMenu'\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this],\n name: 'Virtualization'\n });\n }\n return modules;\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n FileManager.prototype.render = function () {\n this.initialize();\n var slItems = isNOU(this.selectedItems) ? [] :\n this.allowMultiSelection ? this.selectedItems : this.selectedItems.slice(this.selectedItems.length - 1);\n this.setProperties({ selectedItems: slItems }, true);\n this.fileView = this.view;\n this.isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n this.setRtl(this.enableRtl);\n this.addEventListeners();\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n if (this.fileView === 'Details') {\n this.largeiconsviewModule.element.classList.add(CLS.DISPLAY_NONE);\n }\n this.adjustHeight();\n if (isNOU(this.navigationpaneModule)) {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n this.wireEvents();\n this.renderComplete();\n };\n FileManager.prototype.ensurePath = function () {\n var currentPath = this.path;\n if (isNOU(currentPath)) {\n currentPath = '/';\n }\n if (currentPath.lastIndexOf('/') !== (currentPath.length - 1)) {\n currentPath = currentPath + '/';\n }\n this.originalPath = currentPath;\n var paths = currentPath.split('/');\n this.setProperties({ path: paths[0] + '/' }, true);\n this.pathNames = [];\n this.pathId = ['fe_tree'];\n this.itemData = [];\n };\n FileManager.prototype.initialize = function () {\n if (this.isMobile) {\n addClass([this.element], CLS.MOBILE);\n }\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n this.addCssClass(null, this.cssClass);\n this.renderFileUpload();\n };\n FileManager.prototype.addWrapper = function () {\n var headerWrap = this.createElement('div', { id: this.element.id + CLS.TOOLBAR_ID });\n this.element.appendChild(headerWrap);\n var layoutWrap = this.createElement('div', {\n id: this.element.id + CLS.LAYOUT_ID, className: CLS.LAYOUT\n });\n this.element.appendChild(layoutWrap);\n var navigationWrap = this.createElement('div', {\n id: this.element.id + CLS.NAVIGATION_ID, className: CLS.NAVIGATION\n });\n var treeWrap = this.createElement('div', {\n id: this.element.id + CLS.TREE_ID\n });\n navigationWrap.appendChild(treeWrap);\n var contentWrap = this.createElement('div', {\n id: this.element.id + CLS.CONTENT_ID, className: CLS.LAYOUT_CONTENT\n });\n this.breadCrumbBarNavigation = this.createElement('div', {\n id: this.element.id + CLS.BREADCRUMBBAR_ID,\n className: CLS.BREADCRUMBS\n });\n contentWrap.appendChild(this.breadCrumbBarNavigation);\n var gridWrap = this.createElement('div', {\n id: this.element.id + CLS.GRID_ID\n });\n contentWrap.appendChild(gridWrap);\n var largeiconWrap = this.createElement('div', {\n id: this.element.id + CLS.LARGEICON_ID,\n className: CLS.LARGE_ICONS, attrs: { 'role': 'group' }\n });\n contentWrap.appendChild(largeiconWrap);\n var overlay = this.createElement('span', { className: CLS.OVERLAY });\n contentWrap.appendChild(overlay);\n var paneSettings;\n if (!this.enableRtl) {\n layoutWrap.appendChild(navigationWrap);\n layoutWrap.appendChild(contentWrap);\n paneSettings = [\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n },\n { size: '75%', min: '270px' }\n ];\n }\n else {\n layoutWrap.appendChild(contentWrap);\n layoutWrap.appendChild(navigationWrap);\n paneSettings = [\n { size: '75%', min: '270px' },\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n }\n ];\n }\n this.splitterObj = new Splitter({\n paneSettings: paneSettings,\n width: '100%',\n enableRtl: false,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n resizing: this.splitterResize.bind(this)\n });\n this.splitterObj.isStringTemplate = true;\n this.splitterObj.appendTo(layoutWrap);\n var dialogWrap = this.createElement('div', { id: this.element.id + CLS.DIALOG_ID });\n this.element.appendChild(dialogWrap);\n var menuWrap = this.createElement('ul', { id: this.element.id + CLS.CONTEXT_MENU_ID });\n this.element.appendChild(menuWrap);\n var dialogImgWrap = this.createElement('div', { id: this.element.id + CLS.IMG_DIALOG_ID });\n this.element.appendChild(dialogImgWrap);\n var extnDialogWrap = this.createElement('div', { id: this.element.id + CLS.EXTN_DIALOG_ID });\n this.element.appendChild(extnDialogWrap);\n var uploadDialogWrap = this.createElement('div', { id: this.element.id + CLS.UPLOAD_DIALOG_ID });\n this.element.appendChild(uploadDialogWrap);\n };\n FileManager.prototype.adjustHeight = function () {\n var toolbar = select('#' + this.element.id + CLS.TOOLBAR_ID, this.element);\n var toolBarHeight = toolbar ? toolbar.offsetHeight : 0;\n if (this.splitterObj) {\n this.splitterObj.height = (this.element.clientHeight - toolBarHeight).toString();\n this.splitterObj.dataBind();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.splitterResize = function () {\n this.notify(events.splitterResize, {});\n };\n FileManager.prototype.splitterAdjust = function () {\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n if (this.navigationPaneSettings.visible) {\n this.splitterObj.expand(this.enableRtl ? 1 : 0);\n bar.classList.remove(CLS.DISPLAY_NONE);\n }\n else {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n };\n FileManager.prototype.addCssClass = function (oldOne, newOne) {\n if (!isNOU(oldOne) && oldOne !== '') {\n removeClass([this.element], oldOne.split(' '));\n }\n if (!isNOU(newOne) && newOne !== '') {\n addClass([this.element], newOne.split(' '));\n }\n };\n FileManager.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n FileManager.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n FileManager.prototype.onContextMenu = function (e) {\n e.preventDefault();\n };\n FileManager.prototype.checkMobile = function () {\n return (/iphone|ipod|android|blackberry|opera|mini|windows\\sce|palm|smartphone|iemobile/i.test(Browser.userAgent.toLowerCase())\n && /mobile/i.test(Browser.userAgent.toLowerCase()));\n };\n FileManager.prototype.renderFileUpload = function () {\n var id = this.element.id + CLS.UPLOAD_ID;\n var uploadEle = this.createElement('input', { id: id, attrs: { name: 'uploadFiles', type: 'file' } });\n this.element.appendChild(uploadEle);\n this.uploadDialogObj = new Dialog({\n header: getLocaleText(this, 'Header-Upload'),\n content: uploadEle,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: false,\n isModal: true,\n width: '350px',\n target: this.popupTarget ? this.popupTarget : '#' + this.element.id,\n cssClass: getCssClass(this, this.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: this.locale,\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n enableRtl: this.enableRtl,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n open: this.onOpen.bind(this),\n close: this.onClose.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n this.uploadDialogObj.appendTo('#' + this.element.id + CLS.UPLOAD_DIALOG_ID);\n this.renderUploadBox();\n };\n FileManager.prototype.renderUploadBox = function () {\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n this.uploadObj = new Uploader({\n dropArea: select('#' + this.element.id + CLS.CONTENT_ID, this.element),\n asyncSettings: {\n saveUrl: uploadUrl,\n removeUrl: uploadUrl,\n chunkSize: this.uploadSettings.chunkSize,\n retryCount: 0\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n chunkUploading: this.onChunkUploading.bind(this),\n removing: this.onRemoving.bind(this),\n canceling: this.onCancel.bind(this),\n clearing: this.onClearing.bind(this),\n selected: this.onSelected.bind(this),\n success: this.onUploadSuccess.bind(this),\n failure: this.onUploadFailure.bind(this),\n autoUpload: this.uploadSettings.autoUpload,\n minFileSize: this.uploadSettings.minFileSize,\n maxFileSize: this.uploadSettings.maxFileSize,\n allowedExtensions: this.uploadSettings.allowedExtensions,\n directoryUpload: this.uploadSettings.directoryUpload,\n sequentialUpload: this.uploadSettings.sequentialUpload,\n fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onChunkUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n if (this.uploadSettings.chunkSize === 0) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n if (this.allowOrDenyUpload(args, details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n FileManager.prototype.allowOrDenyUpload = function (args, uploadDetails) {\n var permission = getValue('permission', uploadDetails);\n if (isNOU(args) || isNOU(permission) || isNOU(getValue('uploadContentFilter', permission))) {\n return false;\n }\n var hasFolder = args.filesData.some(function (f) {\n var name = !isNOU(f.name) ? f.name : '';\n return name.includes('/') || name.includes('\\\\');\n });\n var hasFile = args.filesData.some(function (f) {\n var name = !isNOU(f.name) ? f.name : '';\n return !(name.includes('/') || name.includes('\\\\'));\n });\n if (hasFolder && getValue('uploadContentFilter', permission) === 1) {\n return true;\n }\n if (hasFile && getValue('uploadContentFilter', permission) === 2) {\n return true;\n }\n return false;\n };\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n FileManager.prototype.onChunkUploadComplete = function (files) {\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n var uploadFile = !isNullOrUndefined(files) ? getValue('file', files).name : '';\n if (uploadFile === this.retryArgs[i].file.name) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadSuccess = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadFailure = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') !== -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireSelectOnDragEvent = function (isBind) {\n if (isNOU(this.view)) {\n return;\n }\n if (isBind) {\n this.viewElem = this.view === 'LargeIcons' ? this.largeiconsviewModule.element : this.element.querySelector('.e-gridcontent');\n }\n if (isBind) {\n if (this.allowMultiSelection) {\n this.on(events.layoutChange, this.onLayoutChange, this);\n this.on(events.selectionChanged, this.onLayoutChange, this);\n }\n }\n else {\n this.off(events.layoutChange, this.onLayoutChange);\n this.off(events.selectionChanged, this.onLayoutChange);\n }\n if (this.viewElem) {\n if (isBind && this.allowMultiSelection) {\n EventHandler.add(this.viewElem, 'mousedown', this.onDragStart, this);\n }\n else {\n EventHandler.remove(this.viewElem, 'mousedown', this.onDragStart);\n }\n }\n };\n FileManager.prototype.wireEvents = function () {\n if (this.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n if (this.contextMenuSettings.visible) {\n this.element.addEventListener('scroll', this.onScrollHandler, true);\n }\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n FileManager.prototype.unWireEvents = function () {\n this.wireSelectOnDragEvent(false);\n EventHandler.remove(window, 'resize', this.resizeHandler);\n if (this.contextMenuSettings.visible) {\n this.element.removeEventListener('scroll', this.onScrollHandler, true);\n }\n this.keyboardModule.destroy();\n };\n FileManager.prototype.onDragStart = function (event) {\n if (this.viewElem) {\n if (this.allowDragAndDrop) {\n var targetElement = closest(event.target, this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-fe-text');\n if (targetElement) {\n return;\n }\n }\n event.preventDefault();\n this.dragX = event.pageX;\n this.dragY = event.pageY;\n if (!this.dragSelectElement) {\n this.dragSelectElement = createElement('div', {\n id: this.element.id + '_drag',\n className: 'e-filemanager e-drag-select',\n styles: 'left: ' + this.dragX + 'px;top: ' + this.dragY + 'px;'\n });\n document.body.append(this.dragSelectElement);\n }\n EventHandler.add(document, 'mouseup', this.onDragStop, this);\n EventHandler.add(this.viewElem, 'mousemove', this.onDrag, this);\n EventHandler.add(this.dragSelectElement, 'mousemove', this.onDrag, this);\n }\n };\n FileManager.prototype.onDrag = function (event) {\n event.stopPropagation();\n if (this.dragSelectElement) {\n var diffX = event.pageX - this.dragX;\n var diffY = event.pageY - this.dragY;\n setStyleAttribute(this.dragSelectElement, {\n 'left': diffX < 0 ? this.dragX + diffX + 'px' : this.dragX + 'px', 'top': diffY < 0 ? this.dragY + diffY + 'px' : this.dragY + 'px',\n 'height': Math.abs(diffY) + 'px', 'width': Math.abs(diffX) + 'px'\n });\n this.selectItems();\n }\n else {\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n };\n FileManager.prototype.onDragStop = function () {\n if (this.viewElem) {\n EventHandler.remove(document, 'mouseup', this.onDragStop);\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n if (this.dragSelectElement) {\n EventHandler.remove(this.dragSelectElement, 'mousemove', this.onDrag);\n if (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0) {\n this.setProperties({ selectedItems: this.dragSelectedItems });\n }\n this.dragSelectedItems = [];\n detach(this.dragSelectElement);\n this.dragSelectElement = null;\n }\n };\n FileManager.prototype.selectItems = function () {\n var dragRect = this.dragSelectElement.getBoundingClientRect();\n if (dragRect.height > 0 && dragRect.width > 0) {\n this.dragSelectedItems = [];\n removeClass(selectAll('.e-active', this.viewElem), ['e-active', 'e-focus']);\n removeClass(selectAll('.e-check', this.viewElem), ['e-check']);\n }\n var allItems = selectAll(this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-row', this.viewElem);\n for (var _i = 0, allItems_1 = allItems; _i < allItems_1.length; _i++) {\n var item = allItems_1[_i];\n var itemRect = item.getBoundingClientRect();\n if (!(dragRect.right < itemRect.left || dragRect.left > itemRect.right\n || dragRect.bottom < itemRect.top || dragRect.top > itemRect.bottom)\n && (dragRect.height > 0 && dragRect.width > 0)) {\n if (this.viewElem.classList.contains('e-large-icons')) {\n item.classList.add('e-active');\n this.dragSelectedItems.push(item.getAttribute('title'));\n }\n else {\n addClass(selectAll('.e-rowcell', item), ['e-active']);\n this.dragSelectedItems.push(item.querySelector('.e-drag-text').textContent);\n }\n if (this.showItemCheckBoxes) {\n if (item.querySelector('.e-frame')) {\n item.querySelector('.e-frame').classList.add('e-check');\n }\n }\n }\n }\n };\n FileManager.prototype.onLayoutChange = function () {\n if (this.enableRangeSelection) {\n this.unWireEvents();\n this.wireEvents();\n }\n };\n FileManager.prototype.setPath = function () {\n this.setProperties({ selectedItems: [] }, true);\n this.ensurePath();\n this.notify(events.clearPathInit, { selectedNode: this.pathId[0] });\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {FileManager} newProp\n * @param {FileManager} oldProp\n * @returns void\n * @private\n */\n /* istanbul ignore next */\n FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var height;\n var requiresRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'ajaxSettings':\n this.ajaxSettingSetModel(newProp);\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showItemCheckBoxes':\n this.showItemCheckBoxes = newProp.showItemCheckBoxes;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableVirtualization':\n this.enableVirtualization = newProp.enableVirtualization;\n requiresRefresh = true;\n break;\n case 'allowMultiSelection':\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n else {\n if (this.selectedItems.length > 1) {\n this.setProperties({ selectedItems: this.selectedItems.slice(this.selectedItems.length - 1) }, true);\n }\n removeClass([this.element], CLS.CHECK_SELECT);\n }\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'cssClass':\n this.addCssClass(oldProp.cssClass, newProp.cssClass);\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'detailsViewSettings':\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableRangeSelection':\n this.wireSelectOnDragEvent(false);\n if (newProp.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n break;\n case 'enableRtl':\n this.enableRtl = newProp.enableRtl;\n requiresRefresh = true;\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n requiresRefresh = true;\n break;\n case 'height':\n height = !isNOU(newProp.height) ? formatUnit(newProp.height) : newProp.height;\n setAttr(this.element, { 'height': height });\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'locale':\n if (!isNOU(newProp.enableRtl)) {\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n }\n this.localeSetModelOption(newProp);\n break;\n case 'navigationPaneSettings':\n this.splitterAdjust();\n this.notify(events.modelChanged, { module: 'navigationpane', newProp: newProp, oldProp: oldProp });\n break;\n case 'path':\n this.oldPath = oldProp.path;\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n if (this.view === 'Details') {\n var columns = this.detailsViewSettings.columns;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.sortBy; }) !== -1;\n if (!isValidSortField) {\n return;\n }\n refresh(this);\n this.notify(events.sortByChange, {});\n this.notify(events.sortColumn, {});\n }\n else {\n refresh(this);\n this.notify(events.sortByChange, {});\n }\n break;\n case 'popupTarget':\n if (this.uploadDialogObj) {\n this.uploadDialogObj.target = newProp.popupTarget;\n }\n if (this.dialogObj) {\n this.dialogObj.target = newProp.popupTarget;\n }\n if (this.extDialogObj) {\n this.extDialogObj.target = newProp.popupTarget;\n }\n if (this.viewerObj) {\n this.viewerObj.target = newProp.popupTarget;\n }\n break;\n case 'fileSystemData':\n this.fileSystemData = newProp.fileSystemData;\n requiresRefresh = true;\n break;\n case 'navigationPaneTemplate':\n this.navigationPaneTemplate = newProp.navigationPaneTemplate;\n requiresRefresh = true;\n break;\n case 'largeIconsTemplate':\n this.largeIconsTemplate = newProp.largeIconsTemplate;\n requiresRefresh = true;\n break;\n }\n }\n if (requiresRefresh) {\n this.refresh();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n this.viewElem = null;\n this.dragSelectElement = null;\n this.dragSelectedItems = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Enables the specified menu items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.enableItems(items, true, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Specifies the method that must be invoked to traverse the path backwards in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.traverseBackward = function () {\n if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {\n this.pathId.pop();\n this.pathNames.pop();\n var newPath = this.pathNames.slice(1).join('/');\n newPath = newPath === '' ? '/' : '/' + newPath + '/';\n this.setProperties({ path: newPath }, true);\n read(this, events.pathChanged, this.path);\n var treeNodeId = this.pathId[this.pathId.length - 1];\n this.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the method which must be invoked to programmatically close the dialog popup in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.closeDialog = function () {\n closePopup(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n FileManager.prototype.restoreFocus = function () {\n if (this.activeModule === 'detailsview') {\n if (this.detailsviewModule.gridObj) {\n this.detailsviewModule.addFocus(this.detailsviewModule.gridObj.selectedRowIndex > -1\n ? this.detailsviewModule.gridObj.selectedRowIndex : 0);\n }\n return;\n }\n var targetItem = this.largeiconsviewModule.getFocusedItem()\n || this.visitedItem || this.largeiconsviewModule.getFirstItem();\n if (targetItem && this.largeiconsviewModule) {\n this.largeiconsviewModule.addFocus(targetItem);\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property([])\n ], FileManager.prototype, \"fileSystemData\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"navigationPaneTemplate\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"largeIconsTemplate\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableRangeSelection\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeFolderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"folderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDelete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"delete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeRename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"rename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeMove\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"move\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"search\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n var _this = this;\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan_1 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan_1 = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>',\n beforeItemRender: function (args) {\n var tickIcon = args.item.iconCss;\n var viewText = args.item.text === getLocaleText(_this.parent, 'View-LargeIcons');\n var iconClass = tickIcon ? ' e-menu-icon ' + tickIcon : '';\n args.element.innerHTML = '<span class=\"' + iconClass + '\"></span>' + (viewText ? largeIconSpan_1 : gridSpan_1) + args.item.text;\n var span = args.element.firstChild;\n if (span && span.className === '') {\n args.element.removeChild(span);\n }\n }\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var _this = this;\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = Object.assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n for (var _i = 0, _a = items; _i < _a.length; _i++) {\n var item = _a[_i];\n if (typeof item === 'object' && item !== null && typeof item.template === 'string') {\n var template = item.template;\n item.template = template.replace(/>((?:Upload|SortBy|View|Refresh|NewFolder|Cut|Copy|Paste|Delete|Rename|Download|SelectAll|Details))</g, function (_match, key) { return '>' + getLocaleText(_this.parent, key) + '<'; });\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n if (this.itemList.length !== 0 && this.largeIconInstance.element.querySelector('.' + CLS.EMPTY)) {\n this.largeIconInstance.element.removeChild(this.largeIconInstance.element.querySelector('.' + CLS.EMPTY));\n }\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add('e-virtual-top');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add('e-virtual-bottom');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n *\n * @param {number} dataSourceLength The length of the data source.\n * @returns {number} The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount =\n Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) /\n (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount *\n (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength || itemCount === 0) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n *\n * @param {boolean} destroy - Set `true` to unwire the scroll event.\n * @returns {void}\n */\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n // Wire the scroll event\n EventHandler.add(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll, this);\n }\n else {\n // Unwire the scroll event\n EventHandler.remove(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll);\n }\n };\n /**\n * Handles the scroll event for the list element.\n * This method updates the top and bottom elements and the displayed items based on the scroll position.\n *\n * @returns {void}\n * @private\n */\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n // Set the starting height to 0\n var startingHeight = 0;\n // Get the current scroll position\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n // Calculate the height of the top element\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n // Calculate the height of the bottom element\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n // If the scroll position is less than or equal to the total height, set the top and bottom element heights.\n // Otherwise, set the top element height to the total height and the bottom element height to 0.\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n // If the top element height has changed, update the top and bottom element heights and re-render the items.\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n // Check whether the scroll direction is upward or downward\n if (scroll > this.scrollPosition) {\n // Scrolling is upward\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n this.onNormalScroll(listDiff, true);\n }\n else {\n // Scrolling is downward\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n this.onNormalScroll(listDiff, false);\n }\n }\n // Update the list difference and scroll position variables\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n this.scrollPosition = scroll;\n // Update the list of items and the items property of the largeIconInstance\n this.largeIconInstance.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.largeIconInstance.element));\n this.itemCount = this.itemCount !== this.largeIconInstance.itemList.length ?\n this.largeIconInstance.itemList.length : this.itemCount;\n this.largeIconInstance.items = this.largeIconInstance.allItems.slice(this.renderedCount -\n this.itemCount, this.renderedCount);\n };\n /**\n * Calculates the current scroll position of the list element.\n *\n * @param {number} startingHeight The starting height from which to calculate the scroll position.\n * @returns {number} The current scroll position.\n * @private\n */\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n // If the scroll position is less than or equal to the starting height, return 0.\n // Otherwise, return the scroll position minus the starting height.\n return ((this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight) <= 0) ? 0 :\n (this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight);\n };\n /**\n * This method updates the displayed items and the selection based on the scroll direction.\n *\n * @param {number} listDiff The number of rows to update.\n * @param {boolean} isScrollingDown If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\n */\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n // Update the displayed items\n for (var i = 0; i < listDiff; i++) {\n this.updateUI(isScrollingDown);\n }\n };\n /**\n * Updates the items in the large icons view.\n *\n * @param {boolean} isScrollingDown - If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\n */\n Virtualization.prototype.updateUI = function (isScrollingDown) {\n var _this = this;\n if (isScrollingDown) {\n // Get the next batch of items to be displayed\n this.items = this.largeIconInstance.allItems.slice(this.renderedCount, this.renderedCount + this.rowItemCount);\n // If there are items to be displayed, create list elements for them and append them to the list\n if (this.items.length > 0) {\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n this.itemList.forEach(function (liEle) {\n _this.largeIconInstance.element.firstElementChild.insertBefore(liEle, _this.bottomElement);\n });\n // Update the rendered count variable\n this.renderedCount = (this.largeIconInstance.allItems.length >= this.renderedCount + this.rowItemCount) ?\n this.renderedCount + this.rowItemCount : this.renderedCount + this.lastRowCount;\n // Remove the first batch of items from the list\n for (var i = 0; i < this.rowItemCount; i++) {\n detach(this.topElement.nextElementSibling);\n }\n }\n }\n else {\n // Scrolling up\n var lastItemIndex = void 0;\n var isAllRendered = void 0;\n if (this.renderedCount === this.largeIconInstance.allItems.length) {\n // Set lastItemIndex to the last item in the last row\n lastItemIndex = this.renderedCount - (this.itemCount - this.rowItemCount + this.lastRowCount);\n // Set renderedCount to the total number of items that have been rendered, except for the items in the last row\n this.renderedCount = ((this.renderedCount - this.lastRowCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.lastRowCount);\n // Set isAllRendered to true to indicate that all items have been rendered\n isAllRendered = true;\n }\n else {\n // Set lastItemIndex to the last item in the current row\n lastItemIndex = this.renderedCount - this.itemCount;\n // Set renderedCount to the total number of items that have been rendered, except for the items in the current row\n this.renderedCount = ((this.renderedCount - this.rowItemCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.rowItemCount);\n }\n // Set startItemIndex to the first item in the current or previous row\n var startItemIndex = (lastItemIndex - this.rowItemCount > 0) ? lastItemIndex - this.rowItemCount : 0;\n // Set the items array to the items in the current or previous row\n this.items = this.largeIconInstance.allItems.slice(startItemIndex, lastItemIndex);\n if (this.items.length > 0) {\n // Create a list of elements from the items array\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n // Set the itemList array to the list items in the list elements\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Add the items to the beginning of the list\n for (var len = this.itemList.length; len > 0; len--) {\n this.largeIconInstance.element.firstElementChild.insertBefore(this.itemList[len - 1], this.topElement.nextElementSibling);\n }\n // Remove the last row of items from the list\n for (var i = 0; i < ((isAllRendered) ? this.lastRowCount : this.rowItemCount); i++) {\n detach(this.bottomElement.previousElementSibling);\n }\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n /**\n * Destroys the component.\n *\n * @returns {void}\n */\n Virtualization.prototype.destroy = function () {\n // If the file manager has already been destroyed, return immediately\n if (this.filemanagerInstance.isDestroyed) {\n return;\n }\n // If the large icon element has a child element, unwire the scroll event\n if (!isNullOrUndefined(this.largeIconInstance.element.firstElementChild)) {\n this.wireScrollEvent(true);\n }\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete, isFileSystemData } from '../common/operations';\nimport { createDialog } from '../pop-up/dialog';\nimport { updatePath, getPath, getDirectories } from '../common/utility';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getDirectoryPath, getModule, getPathId } from '../common/index';\nimport { copyFiles, cutFiles, removeActive, pasteHandler, getParentPath, readDropPath } from '../common/index';\nimport { hasEditAccess, createDeniedDialog, hasDownloadAccess, getAccessClass } from '../common/index';\n/**\n * NavigationPane module\n */\nvar NavigationPane = /** @class */ (function () {\n /**\n * Constructor for the TreeView module\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n /* istanbul ignore next */\n function NavigationPane(parent) {\n this.removeNodes = [];\n this.moveNames = [];\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = [];\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: __assign({ dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name', hasChildren: 'hasChild' }, (isNOU(this.parent.navigationPaneTemplate) && { iconCss: '_fm_icon' }), { htmlAttributes: '_fm_htmlAttr', tooltip: 'name' }),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this),\n nodeTemplate: this.parent.navigationPaneTemplate\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW + ',.' + CLS.TEXT_CONTENT,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW) && !dragTarget.classList.contains(CLS.TEXT_CONTENT)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId, this.parent);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n if (this.parent && this.parent.portals && this.treeObj && this.treeObj.portals) {\n for (var i = 0; i < this.treeObj.portals.length; i++) {\n if (this.parent.portals.indexOf(this.treeObj.portals[i]) === -1) {\n this.parent.portals.push(this.treeObj.portals[i]);\n }\n }\n if (this.parent.isReact) {\n this.parent.renderReactTemplates();\n }\n }\n };\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n var directories = getDirectories(files);\n var targetDirectory = this.getTreeData(target);\n if (directories.length > 0 && targetDirectory.length > 0 &&\n (directories[0].filterPath == null ||\n isNOU(targetDirectory[0])\n && targetDirectory[0].filterPath == null\n || directories[0].filterPath !==\n targetDirectory[0].filterPath)) {\n var length_1 = 0;\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line camelcase\n folders[parseInt(length_1.toString(), 10)]._fm_icon = 'e-fe-folder';\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick &&\n !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked || this.isPathDragged) {\n this.isSameNodeClicked = false;\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.isPathDragged = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.setProperties({ selectedNodes: [node.getAttribute('data-uid')] });\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node, this.parent);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.selectedItems = [];\n this.parent.itemData = nodeData;\n var previousPath = this.parent.path;\n if (!this.isRightClick && this.isSameNodeClicked) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node, this.parent);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onPathDrag = function (args) {\n this.isPathDragged = true;\n this.selectResultNode(args[0]);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpand = function (args) {\n if (!args.isInteracted && !this.isDrag) {\n return;\n }\n if (args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.isNodeExpandCalled = true;\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? nodeData[0].name : id;\n var path = getPath(args.node, newText, isId, this.parent);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], true);\n }\n this.expandNodeTarget = '';\n }\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.setProperties({ selectedNodes: [sleId] });\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.addChild(args.files, id, false);\n this.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = this.previousSelected.length > 0 && this.treeObj.getTreeData(this.previousSelected[0]).length !== 0\n ? this.previousSelected[0] : getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n this.updateItemData();\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEnd = function (args) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.updateTree(args);\n }\n else {\n var data = this.treeObj.getTreeData();\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(data).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(data).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.currentItemText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n this.renameParent = getValue(this.treeObj.fields.parentID, resultData[0]);\n this.parent.expandedId = this.renameParent;\n this.parent.itemData = this.getTreeData(this.renameParent);\n read(this.parent, events.renameEndParent, this.parent.filterPath.replace(/\\\\/g, '/'));\n }\n }\n };\n NavigationPane.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.addDragDrop();\n break;\n case 'navigationPaneSettings':\n read(this.parent, events.finalizeEnd, this.parent.path);\n if (e.oldProp.navigationPaneSettings.sortOrder !== e.newProp.navigationPaneSettings.sortOrder) {\n this.treeObj.sortOrder = e.newProp.navigationPaneSettings.sortOrder;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDownLoadInit = function () {\n this.doDownload();\n };\n NavigationPane.prototype.onSelectionChanged = function (e) {\n this.treeObj.setProperties({ selectedNodes: [e.selectedNode] });\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n if (isFileSystemData(this.parent)) {\n this.moveNames = [];\n var obj = this.parent.dragData;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n }\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n if (!obj || !Array.isArray(obj)) {\n return;\n }\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n NavigationPane.prototype.getTreeData = function (args) {\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var node = select('[data-uid=\"' + this.parent.pathId[this.parent.pathId.length - 1] + '\"]', this.treeObj.element);\n updatePath(node, this.parent.itemData[0], this.parent);\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\nimport { removeBlur, openAction, getImageUrl, fileType, getSortedData, getLocaleText, updateLayout } from '../common/utility';\nimport { createEmptyElement } from '../common/utility';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { cutFiles, addBlur, openSearchFolder, copyFiles, removeActive, pasteHandler, getPathObject, getName } from '../common/index';\nimport { hasReadAccess, hasEditAccess, hasDownloadAccess, doRename, getAccessClass, createDeniedDialog, rename } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule, getFullPath } from '../common/index';\nimport { getDirectoryPath, updateRenamingData, getItemName, doDeleteFiles, doDownloadFiles } from '../common/index';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * DetailsView module\n */\nvar DetailsView = /** @class */ (function () {\n /**\n * Constructor for the GridView module\n *\n * @param {FileManager} parent - specifies the parent.\n * @hidden\n */\n function DetailsView(parent) {\n this.isInteracted = true;\n this.interaction = true;\n this.isPasteOperation = false;\n this.isColumnRefresh = false;\n this.dragObj = null;\n this.startIndex = null;\n this.firstItemIndex = null;\n this.isSelectionUpdate = false;\n this.currentSelectedItem = [];\n this.count = 0;\n this.isRendered = true;\n this.isLoaded = false;\n this.isNameWidth = false;\n this.isMultiSelect = false;\n this.pasteOperation = false;\n this.uploadOperation = false;\n this.nextFocusIndex = null;\n Grid.Inject(Resize, ContextMenu, Sort, VirtualScroll);\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.GRID_ID, this.parent.element);\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n tab: 'tab',\n moveDown: 'downarrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n ctrlUp: 'ctrl+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n end: 'end',\n home: 'home',\n moveUp: 'uparrow',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n back: 'backspace'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n var _this = this;\n if (this.parent.enablePersistence) {\n var gridPersistenceValue = window.localStorage.getItem('grid' + this.parent.element.id + '_grid');\n if (!isNOU(gridPersistenceValue)) {\n var model = JSON.parse(gridPersistenceValue);\n if (!isNOU(model) && Object.keys(model).length > 0 && 'sortSettings' in model) {\n delete model.sortSettings;\n window.localStorage.setItem('grid' + this.parent.element.id + '_grid', JSON.stringify(model));\n }\n }\n }\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.parent.sortBy; }) !== -1;\n if (this.parent.isMobile || !isValidSortField) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick'\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n load: function () {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n if (this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization && this.parent.enablePersistence) {\n this.isLoaded = true;\n }\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n if (this.parent.portals && this.parent.navigationpaneModule &&\n this.parent.navigationpaneModule.treeObj && this.parent.navigationpaneModule.treeObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.navigationpaneModule.treeObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {number} - The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n var enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return \"<div class=\\\"e-fe-text\\\">\" + name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div><span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n var _loop_1 = function (i, len) {\n columns[i].headerText = getLocaleText(this_1.parent, columns[i].headerText);\n if (columns[i].field === 'name' && !isNOU(columns[i].template) && !(typeof columns[i].template === 'function')) {\n var template_1 = columns[i].template;\n columns[i].template = initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return template_1.replace(/\\${name}/g, name);\n });\n }\n };\n var this_1 = this;\n for (var i = 0, len = columns.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '70' : '56');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n if (this.parent.enableRangeSelection) {\n var HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };\n columns.push(HiddenName);\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var text = getValue('name', args.data);\n var textEle = args.row.querySelector('[title= \"' + text + '\"]');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n if (name_1.indexOf(type) !== -1) {\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n var _this = this;\n showSpinner(this.parent.element);\n var nameColumn = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === _this.parent.sortBy; });\n if (nameColumn && !('sortComparer' in nameColumn) || this.parent.sortOrder === 'None') {\n var items = getSortedData(this.parent, (this.parent.enableVirtualization)\n ? args.result\n : this.gridObj.dataSource);\n args.result = items;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) || this.isLoaded) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true && (!isNullOrUndefined(this.gridObj.getDataRows()) && this.gridObj.getDataRows().length > 0)) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.parent.createdItem) {\n this.selectRecords([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n }\n if (this.parent.layoutSelectedItems.length) {\n this.selectRecords(this.parent.layoutSelectedItems);\n }\n if (this.parent.renamedItem && this.parent.selectedItems.length === 0) {\n this.gridObj.clearSelection();\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n if (this.parent.sortOrder === 'None' && !isNOU(this.gridObj.element)) {\n var sortIconElement = this.gridObj.element.querySelector('.e-ascending, .e-descending');\n if (sortIconElement && sortIconElement.classList) {\n sortIconElement.classList.remove('e-icon-ascending', 'e-ascending', 'e-icon-descending', 'e-descending');\n }\n }\n if (typeof this.nextFocusIndex === 'number') {\n var rowCount = this.gridObj.getRows().length;\n if (rowCount > 0) {\n this.addFocus(this.nextFocusIndex >= rowCount ? rowCount : this.nextFocusIndex);\n }\n this.nextFocusIndex = null;\n }\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && !this.parent.hasId && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n DetailsView.prototype.addSelection = function (data) {\n var items = this.gridObj.getCurrentViewRecords();\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showItemCheckBoxes':\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var pathField = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === 'filterPath'; });\n if ((this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) ||\n (!isNullOrUndefined(pathField) && !isNullOrUndefined(pathField.hideAtMedia) && pathField.hideAtMedia !== '')) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n if (this.parent._lastFocused && this.parent.pathId && this.parent.pathId.length) {\n var key = this.parent.pathId[this.parent.pathId.length - 1];\n // eslint-disable-next-line security/detect-object-injection\n var mappedId = this.parent._lastFocused[key];\n if (mappedId) {\n var gridItems = getSortedData(this.parent, args.files);\n for (var i = 0; i < gridItems.length; i++) {\n // eslint-disable-next-line security/detect-object-injection\n if (getValue('_fm_id', gridItems[i]) === mappedId || (this.parent.hasId && getValue('id', gridItems[i]) === mappedId) || getValue('name', gridItems[i]) === mappedId) {\n this.nextFocusIndex = i;\n break;\n }\n }\n }\n }\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.wireClickEvent(true);\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n var _a;\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imageData = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imageData);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n if (_this.parent.pathId && _this.parent.pathId.length) {\n _this.parent._lastFocused = Object.assign(_this.parent._lastFocused || {}, (_a = {}, _a[_this.parent.pathId[_this.parent.pathId.length - 1]] = getValue('_fm_id', data) || getValue('id', data) || name_2, _a));\n }\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n if (this.gridObj == null) {\n return;\n }\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n var filterPathInSettings = this.parent.detailsViewSettings.columns.some(function (col) { return col.field === 'filterPath'; });\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath') && !filterPathInSettings) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n var selectedIndex = this.gridObj.selectedRowIndex;\n this.nextFocusIndex = selectedIndex >= 0 ? selectedIndex : this.nextFocusIndex;\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.querySelector('colgroup');\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else {\n gridHeaderColGroup.children[i].style.width = '180px';\n gridContentColGroup.children[i].style.width = '180px';\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && isNullOrUndefined(this.dragObj)) {\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n var info = null;\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n if (!this.isMultiSelect) {\n this.isMultiSelect = true;\n if ((args.isShiftPressed || args.isCtrlPressed) && !this.parent.allowMultiSelection && (args.target && args.target.parentElement && !args.target.parentElement.classList.contains('e-checkbox-wrapper'))) {\n args.cancel = true;\n var rowIndex = (args && args.rowIndexes)\n ? args.rowIndexes[args.rowIndexes.length - 1]\n : args.rowIndex;\n this.gridObj.selectRow(rowIndex);\n }\n this.isMultiSelect = false;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n var item = this.gridObj.getRowByIndex(args.rowIndex);\n if (!isNOU(item)) {\n item.removeAttribute('tabindex');\n }\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n _this.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (_this.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', _this.parent.allowMultiSelection, _this.gridObj.selectionModule);\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = _this.gridObj.getRows().indexOf(row);\n _this.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.onBlur = function (e) {\n if ((e.relatedTarget !== null && closest(e.relatedTarget, '.e-grid') !== e.relatedTarget)) {\n return;\n }\n if (!isNOU(this.gridObj.element)) {\n var thElements = this.gridObj.element.querySelectorAll('th');\n for (var i = 0; i < thElements.length; i++) {\n if (thElements[i].classList.contains('e-focus')) {\n this.addFocus(null);\n }\n }\n }\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('aria-rowindex'), 10) - 1 : null;\n };\n /* istanbul ignore next */\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1 && this.gridObj.allowSorting === true) {\n if (!e.target.classList.contains('e-fe-grid-icon')) {\n var direction = !e.target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n var currentField = this.gridObj.getColumnByUid(e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid')).field;\n this.gridObj.sortColumn(currentField, direction);\n if (!isNOU(this.getFocusedItem().nextSibling)) {\n this.getFocusedItem().nextSibling.setAttribute('tabindex', '0');\n }\n }\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else {\n this.addHeaderFocus(e);\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n /**\n * Adds focus to the specified grid row.\n *\n * @param {number | null} item - The row index of the item to focus.\n * If null or invalid, no focus is applied.\n * @returns {void}\n * @hidden\n */\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function (e) {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus;\n if (!isNOU(e.target) && e.target.classList.contains('e-defaultcursor')) {\n this.addFocus(0);\n nameFocus = e.target.nextElementSibling;\n }\n else if (!isNOU(this.gridObj.element.querySelector('.e-focus')) && (this.gridObj.element.querySelector('.e-focus').tagName === 'TH')) {\n nameFocus = this.gridObj.element.querySelector('.e-focus').nextElementSibling;\n this.addFocus(0);\n }\n else {\n nameFocus = select('th.e-fe-grid-icon', this.element);\n }\n if (!isNOU(nameFocus)) {\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n DetailsView.prototype.getRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["sortComparer","reference","comparer","referenceIsFile","test","comparerIsFile","referenceParts","comparerParts","replace","_","$1","$2","push","Infinity","length","referencePart","shift","comparerPart","comparisonResult","localeCompare","updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","ids","names","isId","el","parentNode","matches","CLS.LIST_ITEM","navigationpaneModule","treeObj","getTreeData","parentText","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","parseInt","toString","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","getAllChildItems","parentId","children","fileSystemData","filter","item","String","allChildren","slice","forEach","child","childId","concat","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","isFileSystemData","itemData","read","events.layoutChange","events.search","searchSettings","filterType","currData","filteredData","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","responseData","error","Search","showHiddenItems","getPathObject","caseSensitive","hiddenItems","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","imgUrl","eventArgs_1","fileDetails","imageUrl","useImageAsUrl","trigger","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","Date","getTime","eventArgs","type","contentType","responseType","JSON","stringify","onSuccess","onFailure","beforeSend","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","isNullOrUndefined","group","sortBy","lists","getObject","feFiles","createEmptyElement","top","layoutElement","select","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","innerHTML","getLocaleText","uploadObj","dropArea","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","createdDate","modifiedDate","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","navData","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","includes","getTargetPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","name_1","dragData","srcData","dragNodes","tempTarget","dropHandler","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","permission","restriction","getAccessClass","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","isFileExists","some","findIndexById","findIndex","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","filterId","createErrorObject","triggerFolderCreation","createEventArgs","folderName","parentFolder","data_1","newObject","triggerDeleteOperation","deleteEventArgs","index","splice","obj","subItem","triggerRenameOperation","renameEventArgs","fileData","oldName","updateChildrenFilterPath","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","target_1","getTargetFiles","currItem","targetItem","subItems","pathArray","updateMovedItemChildren","triggerSearchOperation","searchEventArgs","searchResults","searchText","triggerClientEvents","fn","mode","dataType","beforeSendArgs","events.beforeRequest","idValue","renamedItem","isFileOperation","map","isMultipleFiles","itemNames","totalSize","getSize","reduce","accumulator","currentObject","location","multipleFiles","created","modified","performReadOperation","Ajax","result_1","triggerAjaxFailure","parse","send","toFixed","events.afterRequest","rootAliasName","rootName","location_1","RegExp","match","events.searchTextChange","copiedItems","childItem","events.selectionChanged","pop","handleCatchError","visible","nextElementSibling","createdItem","events.createEnd","Array","isArray","pathObject","pathLevel","renamePath","events.renameEndParent","renameText","previousSelected","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","contentDisposition_1","fileName_1","Fetch","onLoad","e","headers","get","filenameMatch","extractedFilename","blob","blobUrl","URL","createObjectURL","link","href","body","status","triggerFetchSuccess","triggerFetchFailure","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","replaceItems","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","restoreFocus","duplicateContent","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","onDeleteSubmit","Internationalization","formatDate","format","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","textContent","which","charCode","createImageDialog","imageData","image","src","alt","fetch_1","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","template","customAttributes","class","initializeCSPTemplate","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","imageEventArgsMap","Map","imageUrlCache","nextFocusIndex","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","imageAttributes","htmlAttributes","itemCreated","onItemCreated","largeIconsTemplate","templateID","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","renderReactTemplates","loadImages","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","_this","imgElement","imageKey","has","imageDetails","set","response","x","z","ondragstart","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","uniqueKey","data-image-key","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","activeItem","getFocusedItem","getActiveItem","onDeleteEnd","focusIndex","addFocus","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","mappedItem","_lastFocused","mappedId","foundIndex","getFirstItem","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","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","triggerSelect","removeClass","details_1","fileOpenArgs","fItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","traverseBackward","CLS.FOCUS","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","getPropertyValue","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","renderFileFolderIcons","directoryUpload","menuArgs","fileFolderIcon","isDirectory","isFocused","parentItem","menuType","menuCloseArgs","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","navUid","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","itemsToRemove","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","enable","isUniqueId","validItem","checkValidItem","isTree","getItemData","contextMenuSettings","folder","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","uploadSettings","separator","CLS.TB_OPTION_TICK","CLS.ICON_CUT","CLS.TB_OPTION_DOT","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","File","Folder","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","FolderUpload-Access-Message","FileUpload-Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","onScrollHandler","contextmenuModule","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","adjustHeight","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","splitterAdjust","bar","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","chunkSize","retryCount","uploading","onUploading","chunkUploading","onChunkUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","minFileSize","maxFileSize","allowedExtensions","sequentialUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","allowOrDenyUpload","uploadDetails","hasFolder","f","hasFile","autoClose","onChunkUploadComplete","statusText","onInitialEnd","removeEventListeners","wireSelectOnDragEvent","isBind","viewElem","onDragStart","enableRangeSelection","dragX","pageX","dragY","pageY","dragSelectElement","styles","append","onDragStop","onDrag","stopPropagation","diffX","diffY","setStyleAttribute","Math","abs","dragRect","allItems_1","itemRect","right","bottom","setPath","oldProp","requiresRefresh","ajaxSettingSetModel","localeSetModelOption","col","navigationPaneTemplate","refreshing","CLS.RTL","toolbarModule","disableToolbarItems","enableToolbarItems","enableMenuItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","closeDialog","rtl","selectedRowIndex","Complex","Collection","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","tickIcon","viewText","iconClass","firstChild","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","mergedItems","_match","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","__assign","t","s","n","NavigationPane","removeNodes","moveNames","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","nodeTemplate","getDragPath","getDropPath","nodeData","isReact","addChild","prevent","directories","targetDirectory","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","currFiles","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","itemname","checkDropPath","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","isMultiSelect","Grid","Resize","Sort","VirtualScroll","enablePersistence","gridPersistenceValue","localStorage","getItem","model","sortSettings","setItem","checkNameWidth","getColumns","isValidSortField","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","reactTemplateRender","emptyArgs","pane","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","HiddenName","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","intl","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","getDataRows","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","sortIconElement","rowCount","getRows","gridRecords","getCurrentViewRecords","sRecords","Str2","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","gridItems","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","filterPathInSettings","selectedIndex","selectionModule","selectRowsByRange","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","gridLength","focIndex","selIndex","selRowIndeces","currentField","getColumnByUid","nextSibling","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tagName","check","getRecords","hasFilter","name_4","dRecords","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-filemanager.min.js","sources":["../../src/file-manager/common/utility.js","../../src/file-manager/common/operations.js","../../src/file-manager/pop-up/dialog.js","../../src/file-manager/models/ajax-settings.js","../../src/file-manager/models/toolbar-settings.js","../../src/file-manager/models/search-settings.js","../../src/file-manager/models/details-view-settings.js","../../src/file-manager/models/contextMenu-settings.js","../../src/file-manager/models/navigation-pane-settings.js","../../src/file-manager/models/upload-settings.js","../../src/file-manager/models/column.js","../../src/file-manager/base/classes.js","../../src/file-manager/base/constant.js","../../src/file-manager/layout/large-icons-view.js","../../src/file-manager/actions/breadcrumb-bar.js","../../src/file-manager/pop-up/context-menu.js","../../src/file-manager/models/default-locale.js","../../src/file-manager/base/file-manager.js","../../src/file-manager/actions/toolbar.js","../../src/file-manager/actions/virtualization.js","../../src/file-manager/layout/navigation-pane.js","../../src/file-manager/layout/details-view.js","../../src/global.js"],"sourcesContent":["import * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { read, paste, Search, filter, Download, Delete, isFileSystemData } from '../common/operations';\nimport { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, detach } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createDialog } from '../pop-up/dialog';\n/**\n * Utility function to compare two strings in a way similar to Windows Explorer.\n * Files and folders are sorted separately, with folders coming before files.\n *\n * @param {string} reference - The first string to compare. This could be a file or folder name.\n * @param {string} comparer - The second string to compare. This could be a file or folder name.\n * @returns {number} - A negative number if `reference` should come before `comparer`, a positive number if `comparer` should come before `reference`, and 0 if they are considered equal.\n */\nexport function sortComparer(reference, comparer) {\n // Check if reference and comparer are files or folders\n var referenceIsFile = /\\.\\S+/.test(reference);\n var comparerIsFile = /\\.\\S+/.test(comparer);\n // If one is a file and the other is a folder, the folder should come first\n if (referenceIsFile && !comparerIsFile) {\n return 1;\n }\n if (!referenceIsFile && comparerIsFile) {\n return -1;\n }\n var referenceParts = [];\n var comparerParts = [];\n (reference + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { referenceParts.push([$1 || Infinity, $2 || '']); return ''; });\n (comparer + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { comparerParts.push([$1 || Infinity, $2 || '']); return ''; });\n // Compare each part of reference and comparer\n while (referenceParts.length && comparerParts.length) {\n var referencePart = referenceParts.shift();\n var comparerPart = comparerParts.shift();\n if (referencePart && comparerPart) {\n var comparisonResult = referencePart[0] - comparerPart[0] ||\n referencePart[1].localeCompare(comparerPart[1]);\n if (comparisonResult) {\n return comparisonResult;\n }\n }\n }\n return referenceParts.length - comparerParts.length;\n}\n/**\n * Utility file for common actions\n *\n * @param {HTMLLIElement} node - specifies the node.\n * @param {Object} data - specifies the data.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {void}\n * @private\n */\nexport function updatePath(node, data, instance) {\n var text = getValue('name', data);\n var id = node.getAttribute('data-id');\n var newText = isNOU(id) ? text : id;\n instance.setProperties({ path: getPath(node, newText, instance.hasId, instance) }, true);\n instance.pathId = getPathId(node, instance);\n instance.pathNames = getPathNames(node, text, instance);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId, instance) {\n var matched = getParents(element, text, false, hasId, instance);\n var path = '/';\n var len = matched.length - (2);\n for (var i = len; i >= 0; i--) {\n path += matched[i] + '/';\n }\n return path;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} node - specifies the node element.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node, instance) {\n var matched = getParents(node, node.getAttribute('data-uid'), true, false, instance);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text, instance) {\n var matched = getParents(element, text, false, false, instance);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId, instance) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var data = [{}];\n if (!isNOU(instance) && !isNOU(instance.navigationpaneModule) && !isNOU(instance.navigationpaneModule.treeObj)) {\n data = instance.navigationpaneModule.treeObj.getTreeData(el);\n }\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') : getValue('name', data[0]));\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = '/';\n var i = 1;\n for (i; i < parent.pathId.length; i++) {\n var data = getValue(parent.pathId[parseInt(i.toString(), 10)], parent.feParent);\n newPath += getValue(key, data) + '/';\n }\n parent.setProperties({ path: newPath }, true);\n}\n/**\n * Functions for remove active element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function removeActive(parent) {\n if (parent.isCut) {\n removeBlur(parent);\n parent.selectedNodes = [];\n parent.actionRecords = [];\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n }\n}\n/**\n * Selects active element in File Manager\n *\n * @param {string} action - specifies the action.\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns active element.\n * @private\n */\nexport function activeElement(action, parent) {\n parent.isSearchCut = false;\n parent.actionRecords = [];\n parent.activeElements = [];\n parent.notify(events.cutCopyInit, {});\n if (parent.activeElements.length === 0) {\n return false;\n }\n removeBlur(parent);\n var blurEle = parent.activeElements;\n if (parent.activeModule !== 'navigationpane') {\n parent.targetPath = parent.path;\n }\n else {\n parent.targetPath = getParentPath(parent.path);\n }\n var i = 0;\n if (blurEle) {\n getModule(parent, blurEle[0]);\n if (action === 'cut') {\n while (i < blurEle.length) {\n addBlur(blurEle[i]);\n i++;\n }\n }\n }\n i = 0;\n parent.selectedNodes = [];\n parent.enablePaste = true;\n parent.notify(events.showPaste, {});\n while (i < parent.activeRecords.length) {\n parent.actionRecords.push(parent.activeRecords[i]);\n parent.selectedNodes.push(getValue('name', parent.activeRecords[i]));\n i++;\n }\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) &&\n parent.activeModule !== 'navigationpane') {\n parent.selectedNodes = [];\n parent.isSearchCut = true;\n var i_1 = 0;\n while (i_1 < parent.selectedItems.length) {\n parent.selectedNodes.push(parent.selectedItems[i_1]);\n i_1++;\n }\n }\n return true;\n}\n/**\n * Adds blur to the elements\n *\n * @param {Element} nodes - specifies the nodes.\n * @returns {void}\n * @private\n */\nexport function addBlur(nodes) {\n nodes.classList.add(CLS.BLUR);\n}\n/**\n * Removes blur from elements\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} hover - specifies the hover string.\n * @returns {void}\n * @private\n */\nexport function removeBlur(parent, hover) {\n var blurEle = (!hover) ? parent.element.querySelectorAll('.' + CLS.BLUR) :\n parent.element.querySelectorAll('.' + CLS.HOVER);\n var i = 0;\n while (i < blurEle.length) {\n blurEle[i].classList.remove((!hover) ? CLS.BLUR : CLS.HOVER);\n i++;\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getModule(parent, element) {\n if (element) {\n if (element.classList.contains(CLS.ROW)) {\n parent.activeModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICON)) {\n parent.activeModule = 'largeiconsview';\n }\n else {\n parent.activeModule = 'navigationpane';\n }\n }\n}\n/**\n * Get all child items\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent ID.\n * @returns {Object[]} An array of child items\n * @private\n */\nexport function getAllChildItems(parent, parentId) {\n var children = parent.fileSystemData.filter(function (item) {\n return String(item.parentId) === String(parentId);\n });\n var allChildren = children.slice();\n children.forEach(function (child) {\n var childId = child.id;\n allChildren = allChildren.concat(getAllChildItems(parent, childId));\n });\n return allChildren;\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (isFileSystemData(parent)) {\n if (value === '') {\n parent.itemData = parent.fileSystemData;\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n else {\n parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;\n var currData = getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n var parentId = getValue('id', currData);\n var filteredData = getAllChildItems(parent, parentId);\n var data = new DataManager(filteredData).\n executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));\n var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;\n parent.itemData = data;\n parent.responseData.error = null;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchValue, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n return;\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable') || element.classList.contains('e-text-content')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {BeforeImageLoadEventArgs} - returns the eventargs.\n * @private\n */\nexport function getImageUrl(parent, item) {\n var imgUrl = isFileSystemData(parent) ? getValue('imageUrl', item) : '';\n if (isFileSystemData(parent)) {\n var eventArgs_1 = {\n fileDetails: [item],\n imageUrl: imgUrl,\n useImageAsUrl: true\n };\n parent.trigger('beforeImageLoad', eventArgs_1);\n return eventArgs_1;\n }\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var fileName = encodeURIComponent(getValue('name', item));\n var fPath = getValue('filterPath', item);\n if (parent.hasId) {\n var imgId = getValue('id', item);\n imgUrl = baseUrl + pathUrl + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + pathUrl + encodeURIComponent(fPath.replace(/\\\\/g, '/')) + fileName;\n }\n else {\n imgUrl = baseUrl + pathUrl + parent.path + fileName;\n }\n imgUrl = imgUrl + '&time=' + (new Date().getTime()).toString();\n var data = { 'action': 'getImage', 'path': parent.path + fileName, 'id': getValue('id', item) };\n var ajaxSettings = {\n url: baseUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl,\n useImageAsUrl: true,\n ajaxSettings: ajaxSettings\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/').replace(/^.*?(?=\\/)/, '') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\nexport function getName(parent, data) {\n var name = getValue('name', data);\n var fPath = getValue('filterPath', data);\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) && !isNOU(fPath)) {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(parent.path, '') + name;\n }\n return name;\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object[]} items - specifies the item elements.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None' && !isNullOrUndefined(parent.sortOrder)) {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n var lists = new DataManager(items).executeLocal(query);\n return getValue('records', lists);\n}\n/**\n * Gets the data object\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} key - specifies the key.\n * @param {string} value - specifies the value.\n * @returns {Object} - returns the sorted data.\n * @private\n */\nexport function getObject(parent, key, value) {\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var result = currFiles.filter(function (data) { return data[key].toString() === value; });\n return result[0];\n}\n/**\n * Creates empty element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLElement} element - specifies the element.\n * @param {ReadArgs | SearchArgs} args - specifies the args.\n * @returns {void}\n * @private\n */\nexport function createEmptyElement(parent, element, args) {\n var top;\n var layoutElement = select('#' + parent.element.id + CLS.LAYOUT_ID, parent.element);\n var addressBarHeight = select('#' + parent.element.id + CLS.BREADCRUMBBAR_ID, layoutElement).offsetHeight;\n top = layoutElement.offsetHeight - addressBarHeight;\n if (parent.view === 'Details') {\n top = top - select('.' + CLS.GRID_HEADER, layoutElement).offsetHeight;\n }\n if (isNOU(element.querySelector('.' + CLS.EMPTY))) {\n var emptyDiv = createElement('div', { className: CLS.EMPTY });\n var emptyFolder = createElement('div', { className: CLS.LARGE_EMPTY_FOLDER });\n var emptyEle = createElement('div', { className: CLS.EMPTY_CONTENT });\n var dragFile = createElement('div', { className: CLS.EMPTY_INNER_CONTENT });\n if (parent.view === 'Details') {\n element.querySelector('.' + CLS.GRID_VIEW).appendChild(emptyDiv);\n }\n else {\n element.appendChild(emptyDiv);\n }\n emptyDiv.appendChild(emptyFolder);\n emptyDiv.appendChild(emptyEle);\n emptyDiv.appendChild(dragFile);\n }\n if (element.querySelector('.' + CLS.EMPTY)) {\n if (!isNOU(args.error)) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Access-Denied');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Access-Details');\n }\n else if (parent.isFiltered) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Key');\n }\n else if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Search-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Search-Key');\n }\n else {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Folder-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = parent.uploadObj.dropArea == null ? getLocaleText(parent, '') : getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\nexport function getDirectories(files) {\n return new DataManager(files).executeLocal(new Query().where(events.isFile, 'equal', false, false));\n}\n/**\n * set the Node ID\n *\n * @param {ReadArgs} result - specifies the result.\n * @param {string} rootId - specifies the rootId.\n * @returns {void}\n * @private\n */\nexport function setNodeId(result, rootId) {\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @returns {void}\n * @private\n */\nexport function setDateObject(args) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n setValue('_fm_created', createdDate, args[i]);\n setValue('_fm_modified', modifiedDate, args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @param {IFileManager} [parent] - optional parameter representing the parent IFileManager.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n var data = getObject(parent, key, folders[parseInt(i.toString(), 10)]);\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n if (!isNullOrUndefined(id)) {\n parent.pathId.push(id);\n }\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n read(parent, eventName, parent.path);\n break;\n }\n}\n/**\n * Opens the searched folder\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data\n * @returns {void}\n * @private\n */\nexport function openSearchFolder(parent, data) {\n parent.originalPath = getFullPath(parent, data, parent.path);\n var root = getValue(parent.pathId[0], parent.feParent);\n var navData = parent.feParent[getValue('_fm_id', parent.itemData[0])];\n var isRoot = isNullOrUndefined(navData) || getValue('_fm_id', navData) === 'fe_tree';\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n var searchData = getObject(parent, key, isFileSystemData(parent) ? getValue('id', data) : getValue('name', data));\n if (isNullOrUndefined(searchData)) {\n if (!isRoot) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n }\n else {\n setNextPath(parent, parent.path);\n return;\n }\n }\n else {\n var id = getValue('_fm_id', searchData);\n parent.setProperties({ path: parent.originalPath }, true);\n parent.pathId.push(id);\n parent.itemData = [searchData];\n parent.pathNames.push(getValue('name', searchData));\n }\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n if (parent.activeModule === 'navigationpane' && !parent.selectedNodes[0].includes('/')) {\n parent.targetPath = getTargetPath(parent, parent.actionRecords[0]);\n }\n var subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);\n if (!subFolder) {\n if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {\n parent.notify(events.pasteInit, {});\n paste(parent, parent.targetPath, parent.selectedNodes, path, parent.fileAction, [], parent.actionRecords);\n }\n else {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n removeBlur(parent);\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n }\n }\n }\n}\n/**\n * Validates the sub folders\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {'{ [key: string]: Object; }[]'} data - specifies the data.\n * @param {string} dropPath - specifies the drop path.\n * @param {string} dragPath - specifies the drag path.\n * @returns {boolean} - returns the validated sub folder.\n * @private\n */\nexport function validateSubFolder(parent, data, dropPath, dragPath) {\n var subFolder = false;\n for (var i = 0; i < data.length; i++) {\n if (!getValue('isFile', data[i])) {\n var tempTarget = getFullPath(parent, data[i], dragPath);\n if (dropPath.indexOf(tempTarget) === 0) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Sub-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n else {\n var name_1 = parent.dragData[i] ? parent.dragData[i].name : null;\n var srcData = isFileSystemData(parent) ? name_1 : parent.dragNodes[i];\n var len = 0;\n if (srcData) {\n len = srcData.lastIndexOf('/');\n }\n var path = '';\n if (len > 0) {\n path = dragPath + srcData.substring(0, len + 1);\n }\n if (path === dropPath) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n }\n return subFolder;\n}\n/**\n * Validates the drop handler\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function dropHandler(parent) {\n parent.isDragDrop = true;\n if (parent.dragData.length !== 0) {\n parent.dragPath = parent.dragPath.replace(/\\\\/g, '/');\n parent.dropPath = parent.dropPath.replace(/\\\\/g, '/');\n var subFolder = validateSubFolder(parent, parent.dragData, parent.dropPath, parent.dragPath);\n if (!subFolder && (parent.dragPath !== parent.dropPath)) {\n parent.itemData = [parent.dropData];\n paste(parent, parent.dragPath, parent.dragNodes, parent.dropPath, 'move', [], parent.dragData);\n parent.notify(events.pasteInit, {});\n }\n }\n}\n/**\n * Gets the parent path\n *\n * @param {string} oldPath - specifies the old path.\n * @returns {string} - returns the parent path.\n * @private\n */\nexport function getParentPath(oldPath) {\n var path = oldPath.split('/');\n var newPath = path[0] + '/';\n for (var i = 1; i < path.length - 2; i++) {\n newPath += path[i] + '/';\n }\n return newPath;\n}\n/**\n * Gets the directory path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {ReadArgs} args - returns the read arguements.\n * @returns {string} - returns the directory path\n * @private\n */\nexport function getDirectoryPath(parent, args) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', args.cwd) + '/';\n var fPath = getValue(parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath) && isFileSystemData(parent) && fPath !== '' && fPath !== '\\\\') {\n fPath = '\\\\' + args.cwd.parentId + '\\\\';\n }\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return '/';\n }\n return fPath.replace(/\\\\/g, '/').replace(/^.*?(?=\\/)/, '') + filePath;\n }\n else {\n return isFileSystemData(parent) ? filePath : parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n parent.trigger('success', { action: operation, result: result });\n if (!parent.isDragDrop || (parent.path === parent.dragPath) || (parent.path === parent.dropPath)\n || parent.isSearchDrag) {\n parent.isPathDrag = false;\n read(parent, events.pasteEnd, parent.path);\n }\n else {\n readDropPath(parent);\n }\n}\n/**\n * Reads the drop path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function readDropPath(parent) {\n var pathId = getValue('_fm_id', parent.dropData);\n parent.expandedId = pathId;\n parent.itemData = [parent.dropData];\n if (parent.isPathDrag) {\n parent.notify(events.pathDrag, parent.itemData);\n }\n else {\n if (parent.navigationpaneModule) {\n var node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n if (!node) {\n var liElement = document.querySelector('[data-id = \"' + getValue('id', parent.dropData) + '\"]');\n pathId = liElement.getAttribute('data-uid');\n node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n }\n updatePath(node, parent.dropData, parent);\n }\n read(parent, events.dropPath, parent.dropPath);\n }\n}\n/**\n * Gets the duplicated path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} name - specifies the name.\n * @returns {object} - returns the duplicated path.\n * @private\n */\nexport function getDuplicateData(parent, name) {\n var data = null;\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Remove item class handler\n *\n * @param {Element} scrollParent - specifies the scrolling target.\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} nodeClass - specifies the node class.\n * @param {number} clientY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the target element.\n * @returns {void}\n * @private\n */\nexport function scrollHandler(scrollParent, parent, nodeClass, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select('.' + nodeClass, scrollParent);\n if ((clientY >= (elementData.top + scrollParent.clientHeight - 30)) && !isNullOrUndefined(node)) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, position);\n }\n if (!isNullOrUndefined(node) && (clientY <= (elementData.top + 30))) {\n position = (parent.targetModule === 'navigationpane' || parent.targetModule === 'detailsview') ? node.offsetHeight / 2.5 : node.offsetHeight / 4.5;\n scrollParent.scrollBy(0, -position);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n var scrollParent;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n scrollParent = parent.navigationpaneModule.treeObj.element.parentElement;\n scrollHandler(scrollParent, parent, 'e-level-2', args.event.y);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n scrollParent = parent.detailsviewModule.gridObj.element.querySelector('.e-content');\n scrollHandler(scrollParent, parent, 'e-row', args.event.y);\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n scrollParent = parent.largeiconsviewModule.element.firstElementChild;\n scrollHandler(scrollParent, parent, 'e-large-icon', args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\nexport function createDeniedDialog(parent, data, action) {\n var permission = getValue('permission', data);\n var message = getValue('message', permission);\n var restriction = getValue('uploadContentFilter', permission) === 1 ? 'Folder Upload' : 'File Upload';\n if (message === '') {\n if (!isNOU(permission) && getValue('upload', permission) && getValue('uploadContentFilter', permission) === 1) {\n message = getLocaleText(parent, 'FolderUpload-Access-Message').replace('{0}', getValue('name', data)).replace('{1}', restriction);\n }\n else if (!isNOU(permission) && getValue('upload', permission) && getValue('uploadContentFilter', permission) === 2) {\n message = getLocaleText(parent, 'FileUpload-Access-Message').replace('{0}', getValue('name', data)).replace('{1}', restriction);\n }\n else {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\nexport function hasReadAccess(data) {\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\nexport function hasEditAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\nexport function hasContentAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\nexport function hasUploadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\nexport function hasDownloadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n/**\n * Close dialog popup handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function closePopup(parent) {\n if (!isNullOrUndefined(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n}\n/**\n * Get target path from item data.\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} itemData - specifies the item elements.\n * @returns {string} returns the path.\n * @private\n */\nexport function getTargetPath(parent, itemData) {\n if (parent.hasId && !isNOU(getValue('filterId', itemData))) {\n return getValue('filterId', itemData).replace(/\\\\/g, '/').replace(/^[^/]+\\//, '/');\n }\n else {\n return getValue('filterPath', itemData).replace(/\\\\/g, '/');\n }\n}\n/**\n * Access control handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} itemData - specifies the item elements.\n * @param {string} action - specifies the action.\n * @param {boolean} isPathPermision - specifies the path permission.\n * @returns {string} returns the path.\n * @private\n */\nexport function getAccessDetails(parent, itemData, action, isPathPermision) {\n var accessMessage = '';\n for (var i = 0; i < itemData.length; i++) {\n var permission = getValue('permission', itemData[i]);\n if (permission == null) {\n permission = undefined;\n }\n if (isPathPermision) {\n if (permission && (!getValue('read', permission) || !getValue('writeContents', permission))) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', 'writeContents');\n }\n }\n }\n else {\n var copyOrMovePermission = action === 'copy' ? getValue('copy', permission) : getValue('write', permission);\n if (permission && (!getValue('read', permission) || !copyOrMovePermission)) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', action);\n }\n }\n }\n if (accessMessage !== '') {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: '401',\n message: accessMessage,\n fileExists: null\n },\n files: null\n };\n break;\n }\n }\n return accessMessage;\n}\n","import { Ajax, Fetch, createElement, select, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails, getTargetPath } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) {\n return !isNOU(item) && String(item.id) === String(id);\n });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n if (!isNOU(target.filterId)) {\n Object.assign(newItem, {\n filterId: target.filterId + target.id + '/'\n });\n }\n return newItem;\n}\n/**\n * Function to create an error response.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} message - specifies the error message.\n * @param {string} code - specifies the error code.\n * @param {Object[]} fileName - specifies the file name.\n * @returns {void}\n * @private\n */\nfunction createErrorObject(parent, message, code, fileName) {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: code,\n message: message,\n fileExists: fileName != null ? fileName : null\n },\n files: null\n };\n}\n/**\n * Function to trigger folder creation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerFolderCreation(parent, data, eventArgs) {\n var createEventArgs = {\n folderName: getValue('name', data),\n cancel: false,\n path: getValue('path', data),\n parentFolder: getValue('data', data)\n };\n parent.trigger('beforeFolderCreate', createEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.folderName)) {\n var data_1 = args.parentFolder[0];\n var newObject = createNewItem(data_1, data_1, args.folderName, false);\n parent.fileSystemData.push(newObject);\n }\n else {\n var message = 'A file or folder with the name ' + args.folderName + ' already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger delete operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerDeleteOperation(parent, data, eventArgs) {\n var deleteEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeDelete', deleteEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n args.itemData.forEach(function (itemData) {\n var index = findIndexById(parent, itemData.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n if (!itemData.isFile) {\n var subItems = parent.fileSystemData.filter(function (obj) { return obj.filterPath.includes(itemData.name); });\n subItems.forEach(function (subItem) {\n var index = findIndexById(parent, subItem.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n });\n }\n });\n }\n });\n}\n/**\n * Function to trigger rename operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerRenameOperation(parent, data, eventArgs) {\n var renameEventArgs = {\n cancel: false,\n newName: getValue('newName', data),\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeRename', renameEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.newName)) {\n var fileData = filterById(parent, args.itemData[0].id);\n var oldName = fileData.name;\n fileData.name = args.newName;\n updateChildrenFilterPath(parent, fileData.id, oldName, args.newName);\n parent.responseData.error = null;\n }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to update child item filter path.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent id.\n * @param {string} oldName - specifies the previous name.\n * @param {string} newName - specifies the new name.\n * @returns {void}\n * @private\n */\nfunction updateChildrenFilterPath(parent, parentId, oldName, newName) {\n parent.fileSystemData.forEach(function (item) {\n if (String(item.parentId) === String(parentId)) {\n var oldPath = item.filterPath;\n var newPath = oldPath.replace(oldName + '\\\\', newName + '\\\\');\n item.filterPath = newPath;\n updateChildrenFilterPath(parent, item.id, oldName, newName);\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target_1 = args.targetData;\n var getTargetFiles = filterByParent(parent, target_1.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target_1.hasChild) {\n target_1.hasChild = !currItem.isFile;\n var targetItem = parent.fileSystemData\n .filter(function (item) { return String(item.id) === String(target_1.id); });\n if (targetItem.length > 0) {\n targetItem[0].hasChild = target_1.hasChild;\n }\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentId) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target_1;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target_1 = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target_1.id;\n fileData.filterPath = target_1.id === 0 ? '\\\\' : target_1.filterPath + target_1.name + '\\\\';\n if (!isNOU(target_1.filterId)) {\n fileData.filterId = target_1.filterId + target_1.id + '/';\n }\n if (!currItem.isFile) {\n updateMovedItemChildren(parent, fileData);\n }\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' || event === 'rename-end-parent'\n ? getValue('path', data) : parent.path;\n var pathArray = filePath.replace(/^\\/|\\/$/g, '').split('/');\n var idValue = event === 'rename-end-parent' || (event === 'path-changed' && getValue('data', data).length !== 0 && isNOU(parent.renamedItem))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n if (action === 'copy') {\n itemData = parent.pasteNodes.map(function (item) { return filterById(parent, item); });\n }\n else {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) || isMultipleFiles ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n if (!isNOU(result.files)) {\n setDateObject(result.files);\n for (var i = 0, len = result.files.length; i < len; i++) {\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n }\n if (location_1.indexOf('\\\\') === -1) {\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function to move operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} itemData - specifies the data.\n * @returns {void}\n * @private\n */\nfunction updateMovedItemChildren(parent, itemData) {\n var childItems = filterByParent(parent, itemData.id);\n childItems.forEach(function (childItem) {\n childItem.filterPath = itemData.filterPath + itemData.name + '\\\\';\n if (!isNOU(itemData.filterId)) {\n childItem.filterId = itemData.filterId + itemData.id + '/';\n }\n if (!childItem.isFile) {\n updateMovedItemChildren(parent, childItem);\n }\n });\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (!isNOU(result.error) && result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: action, result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, action);\n }\n }\n catch (error) {\n handleCatchError(parent, error, action);\n }\n}\n/* istanbul ignore next */\n/**\n * Function for create success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction createSuccess(parent, result, itemName) {\n try {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = isFileSystemData(parent) ? result.files[result.files.length - 1] : result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var createEventArgs = {\n folderName: itemName,\n path: parent.path,\n parentFolder: parent.itemData\n };\n parent.trigger('folderCreate', createEventArgs);\n var args = { action: 'create', result: result };\n parent.trigger('success', args);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.createEnd, parent.path);\n }\n else {\n if (result.error.code === '400') {\n if (parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#newname', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n else {\n var result_2 = {\n files: null,\n error: {\n code: '400',\n message: getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + itemName + '\"'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result_2);\n }\n var args = { action: 'create', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'create');\n }\n }\n }\n catch (error) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'create');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result) {\n try {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n var renameEventArgs = {\n newName: parent.renamedItem.name,\n itemData: [parent.renamedItem],\n path: parent.path\n };\n parent.trigger('rename', renameEventArgs);\n if (parent.activeModule === 'navigationpane') {\n var pathObject = getPathObject(parent);\n var pathLevel = parent.pathId[parent.pathId.length - 1].split('_').length - 2;\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n var renamePath = getTargetPath(parent, parent.renamedItem);\n read(parent, events.renameEndParent, renamePath);\n if (!isNOU(pathObject) && parent.pathNames.length > 1 && pathLevel <= parent.pathNames.length - 1) {\n parent.pathNames[pathLevel] = parent.renameText;\n if (!parent.hasId) {\n parent.setProperties({ path: \"/\" + parent.pathNames.slice(1).join('/') + \"/\" }, true);\n }\n }\n parent.itemData = parent.navigationpaneModule.previousSelected.length > 0\n ? parent.navigationpaneModule.treeObj.getTreeData(parent.navigationpaneModule.previousSelected[0]) : parent.itemData;\n read(parent, events.pathChanged, parent.path);\n parent.itemData[0] = parent.renamedItem;\n parent.renamedItem = null;\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n }\n catch (error) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n try {\n var moveorcopyEventArgs = {\n itemData: result.files,\n isCopy: operation === 'copy' ? true : false,\n path: path,\n targetData: parent.itemData[0],\n targetPath: parent.path\n };\n parent.trigger('move', moveorcopyEventArgs);\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n }\n catch (error) {\n handleCatchError(parent, error, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n try {\n var deleteEventArgs = {\n itemData: result.files,\n path: path\n };\n parent.trigger('delete', deleteEventArgs);\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n try {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(parent, event, path, searchString, showHiddenItems, caseSensitive) {\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var ajaxSettings = {\n url: downloadUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { data: data, cancel: false, useFormPost: true, ajaxSettings: ajaxSettings };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n if (downloadArgs.useFormPost) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n else {\n try {\n var contentDisposition_1;\n var fileName_1;\n var fetch_1 = new Fetch({\n url: getValue('url', downloadArgs.ajaxSettings),\n type: getValue('type', downloadArgs.ajaxSettings),\n contentType: getValue('contentType', downloadArgs.ajaxSettings),\n responseType: getValue('responseType', downloadArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', downloadArgs.ajaxSettings),\n onLoad: function (e) {\n contentDisposition_1 = e.headers.get('Content-Disposition');\n if (contentDisposition_1) {\n var filenameMatch = contentDisposition_1.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/);\n var extractedFilename = filenameMatch && filenameMatch[1];\n fileName_1 = extractedFilename ? extractedFilename.replace(/['\"]/g, '') : fileName_1;\n }\n else {\n fileName_1 = parent.itemData.length > 1 ? 'files.zip' : getValue('isFile', parent.itemData[0]) ? getValue('name', parent.itemData[0]) : getValue('name', parent.itemData[0]) + '.zip';\n }\n },\n onSuccess: function (e) {\n parent.trigger('success', downloadArgs);\n var blob = e;\n var blobUrl = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.href = blobUrl;\n link.download = fileName_1;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.downloadUrl\n }\n };\n createDialog(parent, 'Error', result);\n parent.trigger('failure', downloadArgs);\n }\n });\n fetch_1.send(JSON.stringify(downloadArgs.data));\n }\n catch (error) {\n handleCatchError(parent, error, 'download');\n }\n }\n }\n });\n}\n/**\n * Function for on catch handler in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {any} error - specifies the catch error.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction handleCatchError(parent, error, action) {\n var errorResult = {\n files: null,\n error: {\n message: error.message,\n fileExists: null\n }\n };\n onFailure(parent, errorResult, action);\n}\n/**\n * Function for trigger Fetch success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @returns {void}\n */\nexport function triggerFetchSuccess(parent, ajaxSettings) {\n parent.notify(events.afterRequest, { action: 'success' });\n if (ajaxSettings && typeof getValue('onSuccess', ajaxSettings) === 'function') {\n getValue('onSuccess', ajaxSettings)();\n }\n}\n/**\n * Function for trigger Fetch failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n */\nexport function triggerFetchFailure(parent, ajaxSettings, result) {\n parent.notify(events.afterRequest, { action: 'failure' });\n createDialog(parent, 'Error', result);\n if (typeof getValue('onFailure', ajaxSettings) === 'function') {\n getValue('onFailure', ajaxSettings)();\n }\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization, Fetch } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass, getTargetPath } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details) {\n var options = getOptions(parent, text, e, details);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n if (dialogName !== 'Duplicate Items') {\n parent.restoreFocus();\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 {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n var index;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index = val.name.indexOf('.') + 1;\n return (index === 0 && (!val.isFile)) ? 'Folder' : ((index !== 0) ? val.name.substr(index).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] === undefined) {\n strArr = details.name.split(',').map(function (val) {\n index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = '';\n if (parent.activeModule === 'navigationpane') {\n newPath = getTargetPath(parent, parent.itemData[0]);\n }\n else {\n newPath = parent.path;\n }\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {BeforeImageLoadEventArgs} imageData - specifies the image eventargs.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageData) {\n var content = createElement('div', { className: 'e-image-wrap' });\n if (imageData.useImageAsUrl) {\n var image = createElement('img', { className: 'e-image', attrs: { src: imageData.imageUrl, alt: header } });\n content.appendChild(image);\n }\n else {\n var fetch_1 = new Fetch({\n url: getValue('url', imageData.ajaxSettings),\n type: getValue('type', imageData.ajaxSettings),\n contentType: getValue('contentType', imageData.ajaxSettings),\n responseType: getValue('responseType', imageData.ajaxSettings),\n beforeSend: getValue('beforeSend', imageData.ajaxSettings),\n onSuccess: function (e) {\n var blobUrl = URL.createObjectURL(e);\n var image = createElement('img', { className: 'e-image', attrs: { src: blobUrl, alt: header } });\n content.appendChild(image);\n triggerFetchSuccess(parent, imageData.ajaxSettings);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + getValue('url', imageData.ajaxSettings)\n }\n };\n triggerFetchFailure(parent, imageData.ajaxSettings, result);\n }\n });\n var data = getValue('data', imageData.ajaxSettings);\n fetch_1.send(data);\n }\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\n template: '<span class=\"e-fe-text\">${name}</span>',\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"sequentialUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"chunkSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_FOLDER = 'e-icons e-folder';\n/** @hidden */\nexport var ICON_FILE = 'e-icons e-file-format';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable, Fetch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout, getLocaleText } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.imageEventArgsMap = new Map();\n this.imageUrlCache = new Map();\n this.nextFocusIndex = null;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', imageAttributes: '_fm_imageAttr', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n if (this.parent.largeIconsTemplate) {\n this.listObj.template = this.parent.largeIconsTemplate;\n this.listObj.templateID = this.parent.element.id + '_largeIconsTemplate';\n }\n this.items = [];\n this.items = this.renderList(args);\n if (this.parent.sortComparer && this.parent.sortBy !== 'None') {\n this.items = this.allItems = DataUtil.sort(this.items, this.parent.sortBy, this.comparer.bind(this));\n }\n else {\n this.items = this.allItems = getSortedData(this.parent, this.items);\n }\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0 && !isNOU(this.parent.virtualizationModule)) {\n this.parent.virtualizationModule.setUIVirtualization();\n }\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj, null, null, this.parent);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.parent.renderReactTemplates();\n if (this.imageEventArgsMap.size > 0) {\n this.loadImages();\n }\n this.listElements.setAttribute('aria-label', 'listbox');\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0 && !isNOU(this.parent.virtualizationModule)) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.loadImages = function () {\n var _this = this;\n var imageEle = this.parent.element.querySelectorAll('.e-list-img');\n imageEle.forEach(function (imgElement) {\n var imageKey = imgElement.getAttribute('data-image-key');\n if (!imageKey) {\n return;\n }\n if (_this.imageUrlCache.has(imageKey)) {\n imgElement.setAttribute('src', _this.imageUrlCache.get(imageKey));\n imgElement.classList.remove('image-blur');\n return;\n }\n var imageDetails = _this.imageEventArgsMap.get(imageKey);\n if (!imageDetails) {\n return;\n }\n var fetch = new Fetch({\n url: getValue('url', imageDetails.ajaxSettings),\n type: getValue('type', imageDetails.ajaxSettings),\n contentType: getValue('contentType', imageDetails.ajaxSettings),\n responseType: getValue('responseType', imageDetails.ajaxSettings),\n beforeSend: getValue('beforeSend', imageDetails.ajaxSettings),\n onSuccess: function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n _this.imageUrlCache.set(imageKey, blobUrl);\n imgElement.setAttribute('src', blobUrl);\n imgElement.classList.remove('image-blur');\n triggerFetchSuccess(_this.parent, imageDetails.ajaxSettings);\n },\n onFailure: function (response) {\n var result = {\n files: null,\n error: {\n code: response.status ? response.status.toString() : '404',\n message: getLocaleText(_this.parent, 'Network-Error') + ' ' + getValue('url', imageDetails.ajaxSettings),\n fileExists: null\n }\n };\n triggerFetchFailure(_this.parent, imageDetails.ajaxSettings, result);\n }\n });\n fetch.send(getValue('data', imageDetails.ajaxSettings));\n });\n };\n LargeIconsView.prototype.comparer = function (x, y) {\n if (this.parent.sortOrder === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return this.parent.sortComparer(x, y);\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: false,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.dragData.push(this.getItemObject(activeEle[parseInt(i.toString(), 10)]));\n this.parent.activeElements.push(activeEle[i]);\n }\n getModule(this.parent, dragLi);\n this.parent.dragPath = this.parent.path;\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n LargeIconsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, '.e-list-item');\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n var info = this.getItemObject(dropLi);\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n else {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n LargeIconsView.prototype.getModuleName = function () {\n return 'largeiconsview';\n };\n LargeIconsView.prototype.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.largeIconsTemplate) {\n if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n if (txt.indexOf(type) !== -1) {\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n }\n this.renderCheckbox(args);\n }\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imageData = getImageUrl(this.parent, items[i]);\n if (imageData.useImageAsUrl) {\n setValue('_fm_imageUrl', imageData.imageUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n var uniqueKey = \"img_\" + name_1 + \"_\" + i;\n this.imageEventArgsMap.set(uniqueKey, imageData);\n setValue('_fm_imageUrl', '', items[i]);\n setValue('_fm_imageAttr', { alt: name_1, class: 'e-list-img image-blur', 'data-image-key': uniqueKey }, items[i]);\n }\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n var activeItem = this.getFocusedItem() || this.getActiveItem();\n if (activeItem) {\n var index = this.itemList.indexOf(activeItem);\n if (index !== -1) {\n this.nextFocusIndex = index;\n }\n }\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 if (typeof this.nextFocusIndex === 'number') {\n var items = this.element.querySelectorAll('li.e-list-item');\n if (items.length > 0) {\n var focusIndex = this.nextFocusIndex >= items.length\n ? (this.nextFocusIndex === items.length ? items.length - 1 : 0) : this.nextFocusIndex;\n // eslint-disable-next-line security/detect-object-injection\n this.addFocus(items[focusIndex]);\n }\n this.nextFocusIndex = null;\n }\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 var mappedItem = null;\n if (this.parent._lastFocused && this.parent.pathId && this.parent.pathId.length && this.items && this.itemList) {\n var key = this.parent.pathId[this.parent.pathId.length - 1];\n // eslint-disable-next-line security/detect-object-injection\n var mappedId = this.parent._lastFocused[key];\n if (mappedId) {\n var foundIndex = -1;\n for (var i = 0; i < this.items.length; i++) {\n // eslint-disable-next-line security/detect-object-injection\n if (getValue('_fm_id', this.items[i]) === mappedId || (this.parent.hasId && getValue('id', this.items[i]) === mappedId) || getValue('name', this.items[i]) === mappedId) {\n foundIndex = i;\n break;\n }\n }\n // eslint-disable-next-line security/detect-object-injection\n if (foundIndex > -1 && this.itemList[foundIndex]) {\n mappedItem = this.itemList[foundIndex];\n }\n }\n }\n var targetItem = this.getFocusedItem() || mappedItem || this.parent.visitedItem || this.getFirstItem();\n if (targetItem) {\n this.addFocus(targetItem);\n }\n }\n };\n LargeIconsView.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'largeiconsview') {\n this.doOpenAction(args.target);\n }\n };\n LargeIconsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'LargeIcons' && this.element) {\n this.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n LargeIconsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.startItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n var eveArgs = { ctrlKey: true, shiftKey: true };\n this.doSelection(lastItem, eveArgs);\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.clearSelection();\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n LargeIconsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onSearch = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n this.parent.searchedItems = args.files;\n this.onLayoutChange(args);\n }\n };\n LargeIconsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n };\n LargeIconsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.updateSelectedData();\n };\n LargeIconsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'LargeIcons' && !isNOU(this.listObj) &&\n this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered\n && this.parent.sortBy === 'filterPath') {\n this.parent.sortBy = 'name';\n this.parent.notify(events.sortByChange, {});\n }\n };\n LargeIconsView.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.search, this.onSearch);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.splitterResize, this.splitterResizeHandler);\n this.parent.off(events.resizeEnd, this.resizeHandler);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n this.parent.off(events.filterEnd, this.onPathChanged);\n };\n LargeIconsView.prototype.addEventListener = function () {\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.search, this.onSearch, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.splitterResize, this.splitterResizeHandler, this);\n this.parent.on(events.resizeEnd, this.resizeHandler, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n };\n LargeIconsView.prototype.onActionFailure = function () { this.isInteraction = true; this.isInteracted = true; };\n LargeIconsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var ele = closest(args.target, 'li');\n this.parent.itemData = [this.getItemObject(ele)];\n }\n };\n LargeIconsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.updateSelectedData();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n LargeIconsView.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath === '') ? [getPathObject(this.parent)] :\n [this.getItemObject(select('.e-active', this.element))];\n }\n };\n LargeIconsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeRecords = [];\n this.parent.activeElements = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.activeElements.push(activeEle[i]);\n this.parent.activeRecords.push(this.getItemObject(activeEle[i]));\n }\n }\n };\n LargeIconsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n LargeIconsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n LargeIconsView.prototype.onPropertyChanged = function (e) {\n var currentSelected;\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'selectedItems':\n this.isInteraction = false;\n this.isInteracted = false;\n currentSelected = isNOU(this.parent.selectedItems) ? [] : this.parent.selectedItems.slice(0);\n currentSelected = this.parent.allowMultiSelection ? currentSelected :\n currentSelected.slice(currentSelected.length - 1);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onClearAllInit();\n if (currentSelected.length) {\n this.selectItems(currentSelected);\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n this.isInteraction = true;\n this.isInteracted = true;\n break;\n case 'showThumbnail':\n refresh(this.parent);\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n case 'showItemCheckBoxes':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n if (_this.parent.isDevice) {\n _this.tapCount = eve.tapCount;\n _this.tapEvent = eve;\n setTimeout(function () {\n if (_this.tapCount > 0) {\n _this.doTapAction(_this.tapEvent);\n }\n _this.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n _this.dblClickHandler(eve);\n }\n else {\n _this.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n _this.multiSelect = _this.parent.allowMultiSelection ? true : false;\n if (_this.parent.allowMultiSelection) {\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n _this.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var ctrlKey = this.parent.isMac ? e.metaKey : e.ctrlKey;\n var isMacRightClick = this.parent.isMac && e.ctrlKey && e.shiftKey;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if ((e.which === 3 || isMacRightClick) && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.addActive(item);\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (ctrlKey && e.shiftKey && !isMacRightClick) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey && !isMacRightClick) {\n if (!(e && ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n var _a;\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 if (_this.parent.pathId && _this.parent.pathId.length) {\n _this.parent._lastFocused = Object.assign(_this.parent._lastFocused || {}, (_a = {}, _a[_this.parent.pathId[_this.parent.pathId.length - 1]] = getValue('_fm_id', details_1) || getValue('id', details_1) || text, _a));\n }\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imageData = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imageData);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n this.parent.isFile = getValue('isFile', this.getItemObject(item));\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n /**\n *\n * Gets the currently focused item element in the large icon view.\n *\n * @returns {Element} - The DOM element of the focused item, or null if none is focused.\n * @hidden\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 /**\n *\n * Gets the first item element in the large icon view.\n *\n * @returns {Element} - The DOM element representing the first item in the list.\n * @hidden\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 /**\n *\n * Adds focus to the specified item element in the large icon view.\n *\n * @param {Element} item - The DOM element representing the item to focus.\n * @returns {void} - If null or invalid, no focus is applied.\n * @hidden\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 addressbarLI.setAttribute('tabindex', '0');\n addressbarLI.setAttribute('role', 'link');\n var pathLabel = pathNames.slice(0, i + 1).join(' / ');\n addressbarLI.setAttribute('aria-label', pathLabel);\n if (pathNamesLen - i === 1) {\n addressbarLI.setAttribute('aria-current', 'page');\n }\n id = '';\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressATag.setAttribute('role', 'presentation');\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('fileupload')) {\n this.renderFileFolderIcons(args, CLS.ICON_FILE, !this.parent.uploadObj.directoryUpload);\n }\n if (args.item.id === this.getMenuId('folderupload')) {\n this.renderFileFolderIcons(args, CLS.ICON_FOLDER, this.parent.uploadObj.directoryUpload);\n }\n };\n ContextMenu.prototype.renderFileFolderIcons = function (menuArgs, fileFolderIcon, isDirectory) {\n var iconSpan = createElement('span');\n var element = menuArgs.element;\n element.insertBefore(iconSpan, isDirectory ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', fileFolderIcon + ' ' + CLS.MENU_ICON);\n };\n ContextMenu.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: false,\n element: args.element,\n event: args.event,\n isFocused: args.isFocused,\n fileDetails: [this.menuItemData],\n items: args.items,\n parentItem: args.parentItem,\n menuType: this.menuType\n };\n this.parent.trigger('menuClose', eventArgs, function (menuCloseArgs) {\n if (menuCloseArgs.cancel) {\n args.cancel = menuCloseArgs.cancel;\n return;\n }\n });\n if (!this.isMenuItemClicked && this.menuTarget) {\n this.parent.restoreFocus();\n }\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule === 'navigationpane') {\n this.parent.pathId.pop();\n var parentKey = [];\n var itemKeys = Object.keys(this.parent.feParent);\n for (var _i = 0, itemKeys_1 = itemKeys; _i < itemKeys_1.length; _i++) {\n var item = itemKeys_1[_i];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var itemData = getValue(item, this.parent.feParent);\n if (this.parent.pathNames.indexOf(itemData.name) !== -1) {\n parentKey.push(itemData._fm_id);\n }\n }\n this.parent.pathId.push(parentKey[parentKey.length - 1]);\n this.parent.navigationpaneModule.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n var selected = false;\n var uid;\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest('div');\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('aria-rowindex'), 10) - 1]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n if (!isNOU(uid)) {\n this.navUid = uid;\n }\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n else {\n var itemsToRemove = ['Delete', 'Rename', 'Cut', 'Copy'];\n for (var i = 0; i < this.disabledItems.length; i++) {\n var item = this.disabledItems[i];\n if (itemsToRemove.indexOf(item) !== -1) {\n this.disabledItems.splice(i, 1);\n i--;\n }\n }\n }\n /* istanbul ignore next */\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n else {\n var pasteIndex = this.disabledItems.indexOf('Paste');\n if (pasteIndex !== -1) {\n this.disabledItems.splice(pasteIndex, 1);\n }\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n if (enable) {\n this.disabledItems = this.disabledItems.filter(function (item) { return items.indexOf(item) === -1; });\n }\n for (var i = 0; i < items.length; i++) {\n var validItem = this.checkValidItem(items[i]);\n if (validItem === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (validItem === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.navUid + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (!isNOU(selectedTreeNode) &&\n this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n else {\n var indexToRemove = this.disabledItems.indexOf('Open');\n if (indexToRemove !== -1) {\n this.disabledItems.splice(indexToRemove, 1);\n }\n }\n if (this.parent.selectedItems.length === 0) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n }\n else if (this.parent.activeModule !== 'navigationpane') {\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename', 'Paste');\n }\n }\n };\n ContextMenu.prototype.setFileItem = function () {\n this.menuType = 'file';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.file.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename');\n }\n };\n ContextMenu.prototype.setLayoutItem = function (target) {\n this.menuType = 'layout';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.layout.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (!this.parent.allowMultiSelection || ((this.parent.view === 'LargeIcons' &&\n (closest(target, '#' + this.parent.element.id + CLS.LARGEICON_ID).getElementsByClassName(CLS.EMPTY).length !== 0))\n || (this.parent.view === 'Details' &&\n (closest(target, '#' + this.parent.element.id + CLS.GRID_ID).getElementsByClassName(CLS.EMPTY).length !== 0)))) {\n this.disabledItems.push('SelectAll');\n }\n else {\n this.disabledItems = this.disabledItems.filter(function (item) { return item !== 'SelectAll'; });\n }\n if (this.parent.selectedNodes.length === 0) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(this.currentElement)) {\n if (!isNOU(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n }\n return -1;\n };\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n var args = { target: this.menuTarget };\n this.parent.notify(events.menuItemData, args);\n return this.parent.itemData[0];\n }\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onSelect = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var itemText = args.item.id.substr((this.parent.element.id + '_cm_').length);\n var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'fileupload' || itemText === 'folderupload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n if (itemText !== 'cut' && itemText !== 'copy') {\n _this.isMenuItemClicked = true;\n }\n switch (itemText) {\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'paste':\n if (_this.menuType === 'folder') {\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n _this.parent.folderPath = _this.parent.path;\n }\n else {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'name':\n case 'size':\n case 'date':\n case 'ascending':\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n case 'fileupload':\n case 'folderupload':\n _this.parent.setProperties({ uploadSettings: { directoryUpload: itemText === 'fileupload' ? false : true } });\n _this.parent.dataBind();\n uploadItem(_this.parent);\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD,\n items: [\n {\n id: this.getMenuId('folderupload'), text: getLocaleText(this.parent, 'Folder'),\n iconCss: !this.parent.uploadObj.directoryUpload ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('fileupload'), text: getLocaleText(this.parent, 'File'),\n iconCss: this.parent.uploadObj.directoryUpload ? null : CLS.TB_OPTION_TICK\n }\n ]\n };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.split(' ').join('').toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'File': 'File',\n 'Folder': 'Folder',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'FolderUpload-Access-Message': '{0} is not accessible. you need permission to perform the {1} action.',\n 'FileUpload-Access-Message': '{0} is not accessible. you need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, detach, selectAll, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem, closePopup } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.existingFileCount = 0;\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not\n _this.isMac = false;\n _this.dragSelectedItems = [];\n _this.onScrollHandler = function () {\n if (!isNOU(_this.contextmenuModule) && !isNOU(_this.contextmenuModule.contextMenu)) {\n _this.contextmenuModule.contextMenu.close();\n }\n };\n FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);\n return _this;\n }\n FileManager_1 = FileManager;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n FileManager.prototype.getModuleName = function () {\n return 'filemanager';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n FileManager.prototype.preRender = function () {\n if (isNOU(this.element.id) || this.element.id === '') {\n this.element.setAttribute('id', getUniqueID('filemanager'));\n }\n this.ensurePath();\n this.feParent = [];\n this.feFiles = [];\n setAttr(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.isDevice = Browser.isDevice;\n this.isMobile = this.checkMobile();\n if (this.isMobile) {\n this.setProperties({ navigationPaneSettings: { visible: false } }, true);\n }\n var ele = closest(this.element, '.e-bigger');\n this.isBigger = ele ? true : false;\n this.activeModule = (this.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n createSpinner({ target: this.element }, createElement);\n this.addWrapper();\n this.keyConfigs = {\n altN: 'alt+n',\n f5: 'f5',\n ctrlShift1: 'ctrl+shift+1',\n ctrlShift2: 'ctrl+shift+2',\n ctrlU: 'ctrl+u'\n };\n this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale);\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string} - returns the persisted data.\n * @hidden\n */\n FileManager.prototype.getPersistData = function () {\n var keyEntity = ['view', 'path', 'selectedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n FileManager.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'breadcrumbbar',\n args: [this]\n });\n modules.push({\n member: 'largeiconsview',\n args: [this]\n });\n if (this.toolbarSettings.visible) {\n modules.push({\n member: 'toolbar',\n args: [this],\n name: 'Toolbar'\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this],\n name: 'NavigationPane'\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this],\n name: 'DetailsView'\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this],\n name: 'ContextMenu'\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this],\n name: 'Virtualization'\n });\n }\n return modules;\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n FileManager.prototype.render = function () {\n this.initialize();\n var slItems = isNOU(this.selectedItems) ? [] :\n this.allowMultiSelection ? this.selectedItems : this.selectedItems.slice(this.selectedItems.length - 1);\n this.setProperties({ selectedItems: slItems }, true);\n this.fileView = this.view;\n this.isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n this.setRtl(this.enableRtl);\n this.addEventListeners();\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n if (this.fileView === 'Details') {\n this.largeiconsviewModule.element.classList.add(CLS.DISPLAY_NONE);\n }\n this.adjustHeight();\n if (isNOU(this.navigationpaneModule)) {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n this.wireEvents();\n this.renderComplete();\n };\n FileManager.prototype.ensurePath = function () {\n var currentPath = this.path;\n if (isNOU(currentPath)) {\n currentPath = '/';\n }\n if (currentPath.lastIndexOf('/') !== (currentPath.length - 1)) {\n currentPath = currentPath + '/';\n }\n this.originalPath = currentPath;\n var paths = currentPath.split('/');\n this.setProperties({ path: paths[0] + '/' }, true);\n this.pathNames = [];\n this.pathId = ['fe_tree'];\n this.itemData = [];\n };\n FileManager.prototype.initialize = function () {\n if (this.isMobile) {\n addClass([this.element], CLS.MOBILE);\n }\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n this.addCssClass(null, this.cssClass);\n this.renderFileUpload();\n };\n FileManager.prototype.addWrapper = function () {\n var headerWrap = this.createElement('div', { id: this.element.id + CLS.TOOLBAR_ID });\n this.element.appendChild(headerWrap);\n var layoutWrap = this.createElement('div', {\n id: this.element.id + CLS.LAYOUT_ID, className: CLS.LAYOUT\n });\n this.element.appendChild(layoutWrap);\n var navigationWrap = this.createElement('div', {\n id: this.element.id + CLS.NAVIGATION_ID, className: CLS.NAVIGATION\n });\n var treeWrap = this.createElement('div', {\n id: this.element.id + CLS.TREE_ID\n });\n navigationWrap.appendChild(treeWrap);\n var contentWrap = this.createElement('div', {\n id: this.element.id + CLS.CONTENT_ID, className: CLS.LAYOUT_CONTENT\n });\n this.breadCrumbBarNavigation = this.createElement('div', {\n id: this.element.id + CLS.BREADCRUMBBAR_ID,\n className: CLS.BREADCRUMBS\n });\n contentWrap.appendChild(this.breadCrumbBarNavigation);\n var gridWrap = this.createElement('div', {\n id: this.element.id + CLS.GRID_ID\n });\n contentWrap.appendChild(gridWrap);\n var largeiconWrap = this.createElement('div', {\n id: this.element.id + CLS.LARGEICON_ID,\n className: CLS.LARGE_ICONS, attrs: { 'role': 'group' }\n });\n contentWrap.appendChild(largeiconWrap);\n var overlay = this.createElement('span', { className: CLS.OVERLAY });\n contentWrap.appendChild(overlay);\n var paneSettings;\n if (!this.enableRtl) {\n layoutWrap.appendChild(navigationWrap);\n layoutWrap.appendChild(contentWrap);\n paneSettings = [\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n },\n { size: '75%', min: '270px' }\n ];\n }\n else {\n layoutWrap.appendChild(contentWrap);\n layoutWrap.appendChild(navigationWrap);\n paneSettings = [\n { size: '75%', min: '270px' },\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n }\n ];\n }\n this.splitterObj = new Splitter({\n paneSettings: paneSettings,\n width: '100%',\n enableRtl: false,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n resizing: this.splitterResize.bind(this)\n });\n this.splitterObj.isStringTemplate = true;\n this.splitterObj.appendTo(layoutWrap);\n var dialogWrap = this.createElement('div', { id: this.element.id + CLS.DIALOG_ID });\n this.element.appendChild(dialogWrap);\n var menuWrap = this.createElement('ul', { id: this.element.id + CLS.CONTEXT_MENU_ID });\n this.element.appendChild(menuWrap);\n var dialogImgWrap = this.createElement('div', { id: this.element.id + CLS.IMG_DIALOG_ID });\n this.element.appendChild(dialogImgWrap);\n var extnDialogWrap = this.createElement('div', { id: this.element.id + CLS.EXTN_DIALOG_ID });\n this.element.appendChild(extnDialogWrap);\n var uploadDialogWrap = this.createElement('div', { id: this.element.id + CLS.UPLOAD_DIALOG_ID });\n this.element.appendChild(uploadDialogWrap);\n };\n FileManager.prototype.adjustHeight = function () {\n var toolbar = select('#' + this.element.id + CLS.TOOLBAR_ID, this.element);\n var toolBarHeight = toolbar ? toolbar.offsetHeight : 0;\n if (this.splitterObj) {\n this.splitterObj.height = (this.element.clientHeight - toolBarHeight).toString();\n this.splitterObj.dataBind();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.splitterResize = function () {\n this.notify(events.splitterResize, {});\n };\n FileManager.prototype.splitterAdjust = function () {\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n if (this.navigationPaneSettings.visible) {\n this.splitterObj.expand(this.enableRtl ? 1 : 0);\n bar.classList.remove(CLS.DISPLAY_NONE);\n }\n else {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n };\n FileManager.prototype.addCssClass = function (oldOne, newOne) {\n if (!isNOU(oldOne) && oldOne !== '') {\n removeClass([this.element], oldOne.split(' '));\n }\n if (!isNOU(newOne) && newOne !== '') {\n addClass([this.element], newOne.split(' '));\n }\n };\n FileManager.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n FileManager.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n FileManager.prototype.onContextMenu = function (e) {\n e.preventDefault();\n };\n FileManager.prototype.checkMobile = function () {\n return (/iphone|ipod|android|blackberry|opera|mini|windows\\sce|palm|smartphone|iemobile/i.test(Browser.userAgent.toLowerCase())\n && /mobile/i.test(Browser.userAgent.toLowerCase()));\n };\n FileManager.prototype.renderFileUpload = function () {\n var id = this.element.id + CLS.UPLOAD_ID;\n var uploadEle = this.createElement('input', { id: id, attrs: { name: 'uploadFiles', type: 'file' } });\n this.element.appendChild(uploadEle);\n this.uploadDialogObj = new Dialog({\n header: getLocaleText(this, 'Header-Upload'),\n content: uploadEle,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: false,\n isModal: true,\n width: '350px',\n target: this.popupTarget ? this.popupTarget : '#' + this.element.id,\n cssClass: getCssClass(this, this.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: this.locale,\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n enableRtl: this.enableRtl,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n open: this.onOpen.bind(this),\n close: this.onClose.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n this.uploadDialogObj.appendTo('#' + this.element.id + CLS.UPLOAD_DIALOG_ID);\n this.renderUploadBox();\n };\n FileManager.prototype.renderUploadBox = function () {\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n this.uploadObj = new Uploader({\n dropArea: select('#' + this.element.id + CLS.CONTENT_ID, this.element),\n asyncSettings: {\n saveUrl: uploadUrl,\n removeUrl: uploadUrl,\n chunkSize: this.uploadSettings.chunkSize,\n retryCount: 0\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n chunkUploading: this.onChunkUploading.bind(this),\n removing: this.onRemoving.bind(this),\n canceling: this.onCancel.bind(this),\n clearing: this.onClearing.bind(this),\n selected: this.onSelected.bind(this),\n success: this.onUploadSuccess.bind(this),\n failure: this.onUploadFailure.bind(this),\n autoUpload: this.uploadSettings.autoUpload,\n minFileSize: this.uploadSettings.minFileSize,\n maxFileSize: this.uploadSettings.maxFileSize,\n allowedExtensions: this.uploadSettings.allowedExtensions,\n directoryUpload: this.uploadSettings.directoryUpload,\n sequentialUpload: this.uploadSettings.sequentialUpload,\n fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onChunkUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n if (this.uploadSettings.chunkSize === 0) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n if (this.allowOrDenyUpload(args, details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n FileManager.prototype.allowOrDenyUpload = function (args, uploadDetails) {\n var permission = getValue('permission', uploadDetails);\n if (isNOU(args) || isNOU(permission) || isNOU(getValue('uploadContentFilter', permission))) {\n return false;\n }\n var hasFolder = args.filesData.some(function (f) {\n var name = !isNOU(f.name) ? f.name : '';\n return name.includes('/') || name.includes('\\\\');\n });\n var hasFile = args.filesData.some(function (f) {\n var name = !isNOU(f.name) ? f.name : '';\n return !(name.includes('/') || name.includes('\\\\'));\n });\n if (hasFolder && getValue('uploadContentFilter', permission) === 1) {\n return true;\n }\n if (hasFile && getValue('uploadContentFilter', permission) === 2) {\n return true;\n }\n return false;\n };\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n FileManager.prototype.onChunkUploadComplete = function (files) {\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n var uploadFile = !isNullOrUndefined(files) ? getValue('file', files).name : '';\n if (uploadFile === this.retryArgs[i].file.name) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadSuccess = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadFailure = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') !== -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireSelectOnDragEvent = function (isBind) {\n if (isNOU(this.view)) {\n return;\n }\n if (isBind) {\n this.viewElem = this.view === 'LargeIcons' ? this.largeiconsviewModule.element : this.element.querySelector('.e-gridcontent');\n }\n if (isBind) {\n if (this.allowMultiSelection) {\n this.on(events.layoutChange, this.onLayoutChange, this);\n this.on(events.selectionChanged, this.onLayoutChange, this);\n }\n }\n else {\n this.off(events.layoutChange, this.onLayoutChange);\n this.off(events.selectionChanged, this.onLayoutChange);\n }\n if (this.viewElem) {\n if (isBind && this.allowMultiSelection) {\n EventHandler.add(this.viewElem, 'mousedown', this.onDragStart, this);\n }\n else {\n EventHandler.remove(this.viewElem, 'mousedown', this.onDragStart);\n }\n }\n };\n FileManager.prototype.wireEvents = function () {\n if (this.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n if (this.contextMenuSettings.visible) {\n this.element.addEventListener('scroll', this.onScrollHandler, true);\n }\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n FileManager.prototype.unWireEvents = function () {\n this.wireSelectOnDragEvent(false);\n EventHandler.remove(window, 'resize', this.resizeHandler);\n if (this.contextMenuSettings.visible) {\n this.element.removeEventListener('scroll', this.onScrollHandler, true);\n }\n this.keyboardModule.destroy();\n };\n FileManager.prototype.onDragStart = function (event) {\n if (this.viewElem) {\n if (this.allowDragAndDrop) {\n var targetElement = closest(event.target, this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-fe-text');\n if (targetElement) {\n return;\n }\n }\n event.preventDefault();\n this.dragX = event.pageX;\n this.dragY = event.pageY;\n if (!this.dragSelectElement) {\n this.dragSelectElement = createElement('div', {\n id: this.element.id + '_drag',\n className: 'e-filemanager e-drag-select',\n styles: 'left: ' + this.dragX + 'px;top: ' + this.dragY + 'px;'\n });\n document.body.append(this.dragSelectElement);\n }\n EventHandler.add(document, 'mouseup', this.onDragStop, this);\n EventHandler.add(this.viewElem, 'mousemove', this.onDrag, this);\n EventHandler.add(this.dragSelectElement, 'mousemove', this.onDrag, this);\n }\n };\n FileManager.prototype.onDrag = function (event) {\n event.stopPropagation();\n if (this.dragSelectElement) {\n var diffX = event.pageX - this.dragX;\n var diffY = event.pageY - this.dragY;\n setStyleAttribute(this.dragSelectElement, {\n 'left': diffX < 0 ? this.dragX + diffX + 'px' : this.dragX + 'px', 'top': diffY < 0 ? this.dragY + diffY + 'px' : this.dragY + 'px',\n 'height': Math.abs(diffY) + 'px', 'width': Math.abs(diffX) + 'px'\n });\n this.selectItems();\n }\n else {\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n };\n FileManager.prototype.onDragStop = function () {\n if (this.viewElem) {\n EventHandler.remove(document, 'mouseup', this.onDragStop);\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n if (this.dragSelectElement) {\n EventHandler.remove(this.dragSelectElement, 'mousemove', this.onDrag);\n if (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0) {\n this.setProperties({ selectedItems: this.dragSelectedItems });\n }\n this.dragSelectedItems = [];\n detach(this.dragSelectElement);\n this.dragSelectElement = null;\n }\n };\n FileManager.prototype.selectItems = function () {\n var dragRect = this.dragSelectElement.getBoundingClientRect();\n if (dragRect.height > 0 && dragRect.width > 0) {\n this.dragSelectedItems = [];\n removeClass(selectAll('.e-active', this.viewElem), ['e-active', 'e-focus']);\n removeClass(selectAll('.e-check', this.viewElem), ['e-check']);\n }\n var allItems = selectAll(this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-row', this.viewElem);\n for (var _i = 0, allItems_1 = allItems; _i < allItems_1.length; _i++) {\n var item = allItems_1[_i];\n var itemRect = item.getBoundingClientRect();\n if (!(dragRect.right < itemRect.left || dragRect.left > itemRect.right\n || dragRect.bottom < itemRect.top || dragRect.top > itemRect.bottom)\n && (dragRect.height > 0 && dragRect.width > 0)) {\n if (this.viewElem.classList.contains('e-large-icons')) {\n item.classList.add('e-active');\n this.dragSelectedItems.push(item.getAttribute('title'));\n }\n else {\n addClass(selectAll('.e-rowcell', item), ['e-active']);\n this.dragSelectedItems.push(item.querySelector('.e-drag-text').textContent);\n }\n if (this.showItemCheckBoxes) {\n if (item.querySelector('.e-frame')) {\n item.querySelector('.e-frame').classList.add('e-check');\n }\n }\n }\n }\n };\n FileManager.prototype.onLayoutChange = function () {\n if (this.enableRangeSelection) {\n this.unWireEvents();\n this.wireEvents();\n }\n };\n FileManager.prototype.setPath = function () {\n this.setProperties({ selectedItems: [] }, true);\n this.ensurePath();\n this.notify(events.clearPathInit, { selectedNode: this.pathId[0] });\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {FileManager} newProp\n * @param {FileManager} oldProp\n * @returns void\n * @private\n */\n /* istanbul ignore next */\n FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var height;\n var requiresRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'ajaxSettings':\n this.ajaxSettingSetModel(newProp);\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showItemCheckBoxes':\n this.showItemCheckBoxes = newProp.showItemCheckBoxes;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableVirtualization':\n this.enableVirtualization = newProp.enableVirtualization;\n requiresRefresh = true;\n break;\n case 'allowMultiSelection':\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n else {\n if (this.selectedItems.length > 1) {\n this.setProperties({ selectedItems: this.selectedItems.slice(this.selectedItems.length - 1) }, true);\n }\n removeClass([this.element], CLS.CHECK_SELECT);\n }\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'cssClass':\n this.addCssClass(oldProp.cssClass, newProp.cssClass);\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'detailsViewSettings':\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableRangeSelection':\n this.wireSelectOnDragEvent(false);\n if (newProp.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n break;\n case 'enableRtl':\n this.enableRtl = newProp.enableRtl;\n requiresRefresh = true;\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n requiresRefresh = true;\n break;\n case 'height':\n height = !isNOU(newProp.height) ? formatUnit(newProp.height) : newProp.height;\n setAttr(this.element, { 'height': height });\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'locale':\n if (!isNOU(newProp.enableRtl)) {\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n }\n this.localeSetModelOption(newProp);\n break;\n case 'navigationPaneSettings':\n this.splitterAdjust();\n this.notify(events.modelChanged, { module: 'navigationpane', newProp: newProp, oldProp: oldProp });\n break;\n case 'path':\n this.oldPath = oldProp.path;\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n if (this.view === 'Details') {\n var columns = this.detailsViewSettings.columns;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.sortBy; }) !== -1;\n if (!isValidSortField) {\n return;\n }\n refresh(this);\n this.notify(events.sortByChange, {});\n this.notify(events.sortColumn, {});\n }\n else {\n refresh(this);\n this.notify(events.sortByChange, {});\n }\n break;\n case 'popupTarget':\n if (this.uploadDialogObj) {\n this.uploadDialogObj.target = newProp.popupTarget;\n }\n if (this.dialogObj) {\n this.dialogObj.target = newProp.popupTarget;\n }\n if (this.extDialogObj) {\n this.extDialogObj.target = newProp.popupTarget;\n }\n if (this.viewerObj) {\n this.viewerObj.target = newProp.popupTarget;\n }\n break;\n case 'fileSystemData':\n this.fileSystemData = newProp.fileSystemData;\n requiresRefresh = true;\n break;\n case 'navigationPaneTemplate':\n this.navigationPaneTemplate = newProp.navigationPaneTemplate;\n requiresRefresh = true;\n break;\n case 'largeIconsTemplate':\n this.largeIconsTemplate = newProp.largeIconsTemplate;\n requiresRefresh = true;\n break;\n }\n }\n if (requiresRefresh) {\n this.refresh();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n this.viewElem = null;\n this.dragSelectElement = null;\n this.dragSelectedItems = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Enables the specified menu items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.enableItems(items, true, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Specifies the method that must be invoked to traverse the path backwards in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.traverseBackward = function () {\n if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {\n this.pathId.pop();\n this.pathNames.pop();\n var newPath = this.pathNames.slice(1).join('/');\n newPath = newPath === '' ? '/' : '/' + newPath + '/';\n this.setProperties({ path: newPath }, true);\n read(this, events.pathChanged, this.path);\n var treeNodeId = this.pathId[this.pathId.length - 1];\n this.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the method which must be invoked to programmatically close the dialog popup in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.closeDialog = function () {\n closePopup(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n FileManager.prototype.restoreFocus = function () {\n if (this.activeModule === 'detailsview') {\n if (this.detailsviewModule.gridObj) {\n this.detailsviewModule.addFocus(this.detailsviewModule.gridObj.selectedRowIndex > -1\n ? this.detailsviewModule.gridObj.selectedRowIndex : 0);\n }\n return;\n }\n var targetItem = this.largeiconsviewModule.getFocusedItem()\n || this.visitedItem || this.largeiconsviewModule.getFirstItem();\n if (targetItem && this.largeiconsviewModule) {\n this.largeiconsviewModule.addFocus(targetItem);\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property([])\n ], FileManager.prototype, \"fileSystemData\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"navigationPaneTemplate\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"largeIconsTemplate\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableRangeSelection\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeFolderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"folderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDelete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"delete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeRename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"rename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeMove\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"move\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"search\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n var _this = this;\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan_1 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan_1 = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>',\n beforeItemRender: function (args) {\n var tickIcon = args.item.iconCss;\n var viewText = args.item.text === getLocaleText(_this.parent, 'View-LargeIcons');\n var iconClass = tickIcon ? ' e-menu-icon ' + tickIcon : '';\n args.element.innerHTML = '<span class=\"' + iconClass + '\"></span>' + (viewText ? largeIconSpan_1 : gridSpan_1) + args.item.text;\n var span = args.element.firstChild;\n if (span && span.className === '') {\n args.element.removeChild(span);\n }\n }\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var _this = this;\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = Object.assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n for (var _i = 0, _a = items; _i < _a.length; _i++) {\n var item = _a[_i];\n if (typeof item === 'object' && item !== null && typeof item.template === 'string') {\n var template = item.template;\n item.template = template.replace(/>((?:Upload|SortBy|View|Refresh|NewFolder|Cut|Copy|Paste|Delete|Rename|Download|SelectAll|Details))</g, function (_match, key) { return '>' + getLocaleText(_this.parent, key) + '<'; });\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n if (this.itemList.length !== 0 && this.largeIconInstance.element.querySelector('.' + CLS.EMPTY)) {\n this.largeIconInstance.element.removeChild(this.largeIconInstance.element.querySelector('.' + CLS.EMPTY));\n }\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add('e-virtual-top');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add('e-virtual-bottom');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n *\n * @param {number} dataSourceLength The length of the data source.\n * @returns {number} The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount =\n Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) /\n (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount *\n (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength || itemCount === 0) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n *\n * @param {boolean} destroy - Set `true` to unwire the scroll event.\n * @returns {void}\n */\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n // Wire the scroll event\n EventHandler.add(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll, this);\n }\n else {\n // Unwire the scroll event\n EventHandler.remove(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll);\n }\n };\n /**\n * Handles the scroll event for the list element.\n * This method updates the top and bottom elements and the displayed items based on the scroll position.\n *\n * @returns {void}\n * @private\n */\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n // Set the starting height to 0\n var startingHeight = 0;\n // Get the current scroll position\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n // Calculate the height of the top element\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n // Calculate the height of the bottom element\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n // If the scroll position is less than or equal to the total height, set the top and bottom element heights.\n // Otherwise, set the top element height to the total height and the bottom element height to 0.\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n // If the top element height has changed, update the top and bottom element heights and re-render the items.\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n // Check whether the scroll direction is upward or downward\n if (scroll > this.scrollPosition) {\n // Scrolling is upward\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n this.onNormalScroll(listDiff, true);\n }\n else {\n // Scrolling is downward\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n this.onNormalScroll(listDiff, false);\n }\n }\n // Update the list difference and scroll position variables\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n this.scrollPosition = scroll;\n // Update the list of items and the items property of the largeIconInstance\n this.largeIconInstance.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.largeIconInstance.element));\n this.itemCount = this.itemCount !== this.largeIconInstance.itemList.length ?\n this.largeIconInstance.itemList.length : this.itemCount;\n this.largeIconInstance.items = this.largeIconInstance.allItems.slice(this.renderedCount -\n this.itemCount, this.renderedCount);\n };\n /**\n * Calculates the current scroll position of the list element.\n *\n * @param {number} startingHeight The starting height from which to calculate the scroll position.\n * @returns {number} The current scroll position.\n * @private\n */\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n // If the scroll position is less than or equal to the starting height, return 0.\n // Otherwise, return the scroll position minus the starting height.\n return ((this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight) <= 0) ? 0 :\n (this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight);\n };\n /**\n * This method updates the displayed items and the selection based on the scroll direction.\n *\n * @param {number} listDiff The number of rows to update.\n * @param {boolean} isScrollingDown If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\n */\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n // Update the displayed items\n for (var i = 0; i < listDiff; i++) {\n this.updateUI(isScrollingDown);\n }\n };\n /**\n * Updates the items in the large icons view.\n *\n * @param {boolean} isScrollingDown - If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\n */\n Virtualization.prototype.updateUI = function (isScrollingDown) {\n var _this = this;\n if (isScrollingDown) {\n // Get the next batch of items to be displayed\n this.items = this.largeIconInstance.allItems.slice(this.renderedCount, this.renderedCount + this.rowItemCount);\n // If there are items to be displayed, create list elements for them and append them to the list\n if (this.items.length > 0) {\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n this.itemList.forEach(function (liEle) {\n _this.largeIconInstance.element.firstElementChild.insertBefore(liEle, _this.bottomElement);\n });\n // Update the rendered count variable\n this.renderedCount = (this.largeIconInstance.allItems.length >= this.renderedCount + this.rowItemCount) ?\n this.renderedCount + this.rowItemCount : this.renderedCount + this.lastRowCount;\n // Remove the first batch of items from the list\n for (var i = 0; i < this.rowItemCount; i++) {\n detach(this.topElement.nextElementSibling);\n }\n }\n }\n else {\n // Scrolling up\n var lastItemIndex = void 0;\n var isAllRendered = void 0;\n if (this.renderedCount === this.largeIconInstance.allItems.length) {\n // Set lastItemIndex to the last item in the last row\n lastItemIndex = this.renderedCount - (this.itemCount - this.rowItemCount + this.lastRowCount);\n // Set renderedCount to the total number of items that have been rendered, except for the items in the last row\n this.renderedCount = ((this.renderedCount - this.lastRowCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.lastRowCount);\n // Set isAllRendered to true to indicate that all items have been rendered\n isAllRendered = true;\n }\n else {\n // Set lastItemIndex to the last item in the current row\n lastItemIndex = this.renderedCount - this.itemCount;\n // Set renderedCount to the total number of items that have been rendered, except for the items in the current row\n this.renderedCount = ((this.renderedCount - this.rowItemCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.rowItemCount);\n }\n // Set startItemIndex to the first item in the current or previous row\n var startItemIndex = (lastItemIndex - this.rowItemCount > 0) ? lastItemIndex - this.rowItemCount : 0;\n // Set the items array to the items in the current or previous row\n this.items = this.largeIconInstance.allItems.slice(startItemIndex, lastItemIndex);\n if (this.items.length > 0) {\n // Create a list of elements from the items array\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n // Set the itemList array to the list items in the list elements\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Add the items to the beginning of the list\n for (var len = this.itemList.length; len > 0; len--) {\n this.largeIconInstance.element.firstElementChild.insertBefore(this.itemList[len - 1], this.topElement.nextElementSibling);\n }\n // Remove the last row of items from the list\n for (var i = 0; i < ((isAllRendered) ? this.lastRowCount : this.rowItemCount); i++) {\n detach(this.bottomElement.previousElementSibling);\n }\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n /**\n * Destroys the component.\n *\n * @returns {void}\n */\n Virtualization.prototype.destroy = function () {\n // If the file manager has already been destroyed, return immediately\n if (this.filemanagerInstance.isDestroyed) {\n return;\n }\n // If the large icon element has a child element, unwire the scroll event\n if (!isNullOrUndefined(this.largeIconInstance.element.firstElementChild)) {\n this.wireScrollEvent(true);\n }\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete, isFileSystemData } from '../common/operations';\nimport { createDialog } from '../pop-up/dialog';\nimport { updatePath, getPath, getDirectories } from '../common/utility';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getDirectoryPath, getModule, getPathId } from '../common/index';\nimport { copyFiles, cutFiles, removeActive, pasteHandler, getParentPath, readDropPath } from '../common/index';\nimport { hasEditAccess, createDeniedDialog, hasDownloadAccess, getAccessClass } from '../common/index';\n/**\n * NavigationPane module\n */\nvar NavigationPane = /** @class */ (function () {\n /**\n * Constructor for the TreeView module\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n /* istanbul ignore next */\n function NavigationPane(parent) {\n this.removeNodes = [];\n this.moveNames = [];\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = [];\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: __assign({ dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name', hasChildren: 'hasChild' }, (isNOU(this.parent.navigationPaneTemplate) && { iconCss: '_fm_icon' }), { htmlAttributes: '_fm_htmlAttr', tooltip: 'name' }),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this),\n nodeTemplate: this.parent.navigationPaneTemplate\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW + ',.' + CLS.TEXT_CONTENT,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW) && !dragTarget.classList.contains(CLS.TEXT_CONTENT)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId, this.parent);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n if (this.parent && this.parent.portals && this.treeObj && this.treeObj.portals) {\n for (var i = 0; i < this.treeObj.portals.length; i++) {\n if (this.parent.portals.indexOf(this.treeObj.portals[i]) === -1) {\n this.parent.portals.push(this.treeObj.portals[i]);\n }\n }\n if (this.parent.isReact) {\n this.parent.renderReactTemplates();\n }\n }\n };\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n var directories = getDirectories(files);\n var targetDirectory = this.getTreeData(target);\n if (directories.length > 0 && targetDirectory.length > 0 &&\n (directories[0].filterPath == null ||\n isNOU(targetDirectory[0])\n && targetDirectory[0].filterPath == null\n || directories[0].filterPath !==\n targetDirectory[0].filterPath)) {\n var length_1 = 0;\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line camelcase\n folders[parseInt(length_1.toString(), 10)]._fm_icon = 'e-fe-folder';\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick &&\n !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked || this.isPathDragged) {\n this.isSameNodeClicked = false;\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.isPathDragged = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.setProperties({ selectedNodes: [node.getAttribute('data-uid')] });\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node, this.parent);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.selectedItems = [];\n this.parent.itemData = nodeData;\n var previousPath = this.parent.path;\n if (!this.isRightClick && this.isSameNodeClicked) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node, this.parent);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onPathDrag = function (args) {\n this.isPathDragged = true;\n this.selectResultNode(args[0]);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpand = function (args) {\n if (!args.isInteracted && !this.isDrag) {\n return;\n }\n if (args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.isNodeExpandCalled = true;\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? nodeData[0].name : id;\n var path = getPath(args.node, newText, isId, this.parent);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], true);\n }\n this.expandNodeTarget = '';\n }\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.setProperties({ selectedNodes: [sleId] });\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.addChild(args.files, id, false);\n this.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = this.previousSelected.length > 0 && this.treeObj.getTreeData(this.previousSelected[0]).length !== 0\n ? this.previousSelected[0] : getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n this.updateItemData();\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEnd = function (args) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.updateTree(args);\n }\n else {\n var data = this.treeObj.getTreeData();\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(data).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(data).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.currentItemText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n this.renameParent = getValue(this.treeObj.fields.parentID, resultData[0]);\n this.parent.expandedId = this.renameParent;\n this.parent.itemData = this.getTreeData(this.renameParent);\n read(this.parent, events.renameEndParent, this.parent.filterPath.replace(/\\\\/g, '/'));\n }\n }\n };\n NavigationPane.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.addDragDrop();\n break;\n case 'navigationPaneSettings':\n read(this.parent, events.finalizeEnd, this.parent.path);\n if (e.oldProp.navigationPaneSettings.sortOrder !== e.newProp.navigationPaneSettings.sortOrder) {\n this.treeObj.sortOrder = e.newProp.navigationPaneSettings.sortOrder;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDownLoadInit = function () {\n this.doDownload();\n };\n NavigationPane.prototype.onSelectionChanged = function (e) {\n this.treeObj.setProperties({ selectedNodes: [e.selectedNode] });\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n if (isFileSystemData(this.parent)) {\n this.moveNames = [];\n var obj = this.parent.dragData;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n }\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n if (!obj || !Array.isArray(obj)) {\n return;\n }\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n NavigationPane.prototype.getTreeData = function (args) {\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var node = select('[data-uid=\"' + this.parent.pathId[this.parent.pathId.length - 1] + '\"]', this.treeObj.element);\n updatePath(node, this.parent.itemData[0], this.parent);\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\nimport { removeBlur, openAction, getImageUrl, fileType, getSortedData, getLocaleText, updateLayout } from '../common/utility';\nimport { createEmptyElement } from '../common/utility';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { cutFiles, addBlur, openSearchFolder, copyFiles, removeActive, pasteHandler, getPathObject, getName } from '../common/index';\nimport { hasReadAccess, hasEditAccess, hasDownloadAccess, doRename, getAccessClass, createDeniedDialog, rename } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule, getFullPath } from '../common/index';\nimport { getDirectoryPath, updateRenamingData, getItemName, doDeleteFiles, doDownloadFiles } from '../common/index';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * DetailsView module\n */\nvar DetailsView = /** @class */ (function () {\n /**\n * Constructor for the GridView module\n *\n * @param {FileManager} parent - specifies the parent.\n * @hidden\n */\n function DetailsView(parent) {\n this.isInteracted = true;\n this.interaction = true;\n this.isPasteOperation = false;\n this.isColumnRefresh = false;\n this.dragObj = null;\n this.startIndex = null;\n this.firstItemIndex = null;\n this.isSelectionUpdate = false;\n this.currentSelectedItem = [];\n this.count = 0;\n this.isRendered = true;\n this.isLoaded = false;\n this.isNameWidth = false;\n this.isMultiSelect = false;\n this.pasteOperation = false;\n this.uploadOperation = false;\n this.nextFocusIndex = null;\n Grid.Inject(Resize, ContextMenu, Sort, VirtualScroll);\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.GRID_ID, this.parent.element);\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n tab: 'tab',\n moveDown: 'downarrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n ctrlUp: 'ctrl+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n end: 'end',\n home: 'home',\n moveUp: 'uparrow',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n back: 'backspace'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n var _this = this;\n if (this.parent.enablePersistence) {\n var gridPersistenceValue = window.localStorage.getItem('grid' + this.parent.element.id + '_grid');\n if (!isNOU(gridPersistenceValue)) {\n var model = JSON.parse(gridPersistenceValue);\n if (!isNOU(model) && Object.keys(model).length > 0 && 'sortSettings' in model) {\n delete model.sortSettings;\n window.localStorage.setItem('grid' + this.parent.element.id + '_grid', JSON.stringify(model));\n }\n }\n }\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.parent.sortBy; }) !== -1;\n if (this.parent.isMobile || !isValidSortField) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick'\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n load: function () {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n if (this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization && this.parent.enablePersistence) {\n this.isLoaded = true;\n }\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n if (this.parent.portals && this.parent.navigationpaneModule &&\n this.parent.navigationpaneModule.treeObj && this.parent.navigationpaneModule.treeObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.navigationpaneModule.treeObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {number} - The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n var enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return \"<div class=\\\"e-fe-text\\\">\" + name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div><span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n var _loop_1 = function (i, len) {\n columns[i].headerText = getLocaleText(this_1.parent, columns[i].headerText);\n if (columns[i].field === 'name' && !isNOU(columns[i].template) && !(typeof columns[i].template === 'function')) {\n var template_1 = columns[i].template;\n columns[i].template = initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return template_1.replace(/\\${name}/g, name);\n });\n }\n };\n var this_1 = this;\n for (var i = 0, len = columns.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '70' : '56');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n if (this.parent.enableRangeSelection) {\n var HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };\n columns.push(HiddenName);\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var text = getValue('name', args.data);\n var textEle = args.row.querySelector('[title= \"' + text + '\"]');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n if (name_1.indexOf(type) !== -1) {\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n var _this = this;\n showSpinner(this.parent.element);\n var nameColumn = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === _this.parent.sortBy; });\n if (nameColumn && !('sortComparer' in nameColumn) || this.parent.sortOrder === 'None') {\n var items = getSortedData(this.parent, (this.parent.enableVirtualization)\n ? args.result\n : this.gridObj.dataSource);\n args.result = items;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) || this.isLoaded) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true && (!isNullOrUndefined(this.gridObj.getDataRows()) && this.gridObj.getDataRows().length > 0)) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.parent.createdItem) {\n this.selectRecords([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n }\n if (this.parent.layoutSelectedItems.length) {\n this.selectRecords(this.parent.layoutSelectedItems);\n }\n if (this.parent.renamedItem && this.parent.selectedItems.length === 0) {\n this.gridObj.clearSelection();\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n if (this.parent.sortOrder === 'None' && !isNOU(this.gridObj.element)) {\n var sortIconElement = this.gridObj.element.querySelector('.e-ascending, .e-descending');\n if (sortIconElement && sortIconElement.classList) {\n sortIconElement.classList.remove('e-icon-ascending', 'e-ascending', 'e-icon-descending', 'e-descending');\n }\n }\n if (typeof this.nextFocusIndex === 'number') {\n var rowCount = this.gridObj.getRows().length;\n if (rowCount > 0) {\n this.addFocus(this.nextFocusIndex >= rowCount ? rowCount : this.nextFocusIndex);\n }\n this.nextFocusIndex = null;\n }\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && !this.parent.hasId && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n DetailsView.prototype.addSelection = function (data) {\n var items = this.gridObj.getCurrentViewRecords();\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showItemCheckBoxes':\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var pathField = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === 'filterPath'; });\n if ((this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) ||\n (!isNullOrUndefined(pathField) && !isNullOrUndefined(pathField.hideAtMedia) && pathField.hideAtMedia !== '')) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n if (this.parent._lastFocused && this.parent.pathId && this.parent.pathId.length) {\n var key = this.parent.pathId[this.parent.pathId.length - 1];\n // eslint-disable-next-line security/detect-object-injection\n var mappedId = this.parent._lastFocused[key];\n if (mappedId) {\n var gridItems = getSortedData(this.parent, args.files);\n for (var i = 0; i < gridItems.length; i++) {\n // eslint-disable-next-line security/detect-object-injection\n if (getValue('_fm_id', gridItems[i]) === mappedId || (this.parent.hasId && getValue('id', gridItems[i]) === mappedId) || getValue('name', gridItems[i]) === mappedId) {\n this.nextFocusIndex = i;\n break;\n }\n }\n }\n }\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.wireClickEvent(true);\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n var _a;\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imageData = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imageData);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n if (_this.parent.pathId && _this.parent.pathId.length) {\n _this.parent._lastFocused = Object.assign(_this.parent._lastFocused || {}, (_a = {}, _a[_this.parent.pathId[_this.parent.pathId.length - 1]] = getValue('_fm_id', data) || getValue('id', data) || name_2, _a));\n }\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n if (this.gridObj == null) {\n return;\n }\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n var filterPathInSettings = this.parent.detailsViewSettings.columns.some(function (col) { return col.field === 'filterPath'; });\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath') && !filterPathInSettings) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n var selectedIndex = this.gridObj.selectedRowIndex;\n this.nextFocusIndex = selectedIndex >= 0 ? selectedIndex : this.nextFocusIndex;\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.querySelector('colgroup');\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else {\n gridHeaderColGroup.children[i].style.width = '180px';\n gridContentColGroup.children[i].style.width = '180px';\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && isNullOrUndefined(this.dragObj)) {\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n var info = null;\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n if (!this.isMultiSelect) {\n this.isMultiSelect = true;\n if ((args.isShiftPressed || args.isCtrlPressed) && !this.parent.allowMultiSelection && (args.target && args.target.parentElement && !args.target.parentElement.classList.contains('e-checkbox-wrapper'))) {\n args.cancel = true;\n var rowIndex = (args && args.rowIndexes)\n ? args.rowIndexes[args.rowIndexes.length - 1]\n : args.rowIndex;\n this.gridObj.selectRow(rowIndex);\n }\n this.isMultiSelect = false;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n var item = this.gridObj.getRowByIndex(args.rowIndex);\n if (!isNOU(item)) {\n item.removeAttribute('tabindex');\n }\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n _this.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (_this.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', _this.parent.allowMultiSelection, _this.gridObj.selectionModule);\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = _this.gridObj.getRows().indexOf(row);\n _this.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.onBlur = function (e) {\n if ((e.relatedTarget !== null && closest(e.relatedTarget, '.e-grid') !== e.relatedTarget)) {\n return;\n }\n if (!isNOU(this.gridObj.element)) {\n var thElements = this.gridObj.element.querySelectorAll('th');\n for (var i = 0; i < thElements.length; i++) {\n if (thElements[i].classList.contains('e-focus')) {\n this.addFocus(null);\n }\n }\n }\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('aria-rowindex'), 10) - 1 : null;\n };\n /* istanbul ignore next */\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1 && this.gridObj.allowSorting === true) {\n if (!e.target.classList.contains('e-fe-grid-icon')) {\n var direction = !e.target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n var currentField = this.gridObj.getColumnByUid(e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid')).field;\n this.gridObj.sortColumn(currentField, direction);\n if (!isNOU(this.getFocusedItem().nextSibling)) {\n this.getFocusedItem().nextSibling.setAttribute('tabindex', '0');\n }\n }\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else {\n this.addHeaderFocus(e);\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n /**\n * Adds focus to the specified grid row.\n *\n * @param {number | null} item - The row index of the item to focus.\n * If null or invalid, no focus is applied.\n * @returns {void}\n * @hidden\n */\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function (e) {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus;\n if (!isNOU(e.target) && e.target.classList.contains('e-defaultcursor')) {\n this.addFocus(0);\n nameFocus = e.target.nextElementSibling;\n }\n else if (!isNOU(this.gridObj.element.querySelector('.e-focus')) && (this.gridObj.element.querySelector('.e-focus').tagName === 'TH')) {\n nameFocus = this.gridObj.element.querySelector('.e-focus').nextElementSibling;\n this.addFocus(0);\n }\n else {\n nameFocus = select('th.e-fe-grid-icon', this.element);\n }\n if (!isNOU(nameFocus)) {\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n DetailsView.prototype.getRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["sortComparer","reference","comparer","referenceIsFile","test","comparerIsFile","referenceParts","comparerParts","replace","_","$1","$2","push","Infinity","length","referencePart","shift","comparerPart","comparisonResult","localeCompare","updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","ids","names","isId","el","parentNode","matches","CLS.LIST_ITEM","navigationpaneModule","treeObj","getTreeData","parentText","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","parseInt","toString","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","getAllChildItems","parentId","children","fileSystemData","filter","item","String","allChildren","slice","forEach","child","childId","concat","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","isFileSystemData","itemData","read","events.layoutChange","events.search","searchSettings","filterType","currData","filteredData","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","responseData","error","Search","showHiddenItems","getPathObject","caseSensitive","hiddenItems","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","imgUrl","eventArgs_1","fileDetails","imageUrl","useImageAsUrl","trigger","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","Date","getTime","eventArgs","type","contentType","responseType","JSON","stringify","onSuccess","onFailure","beforeSend","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","isNullOrUndefined","group","sortBy","lists","getObject","feFiles","createEmptyElement","top","layoutElement","select","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","innerHTML","getLocaleText","uploadObj","dropArea","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","createdDate","modifiedDate","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","navData","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","includes","getTargetPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","name_1","dragData","srcData","dragNodes","tempTarget","dropHandler","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","permission","restriction","getAccessClass","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","isFileExists","some","findIndexById","findIndex","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","filterId","createErrorObject","triggerFolderCreation","createEventArgs","folderName","parentFolder","data_1","newObject","triggerDeleteOperation","deleteEventArgs","index","splice","obj","subItem","triggerRenameOperation","renameEventArgs","fileData","oldName","updateChildrenFilterPath","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","target_1","getTargetFiles","currItem","targetItem","subItems","pathArray","updateMovedItemChildren","triggerSearchOperation","searchEventArgs","searchResults","searchText","triggerClientEvents","fn","mode","dataType","beforeSendArgs","events.beforeRequest","idValue","renamedItem","isFileOperation","map","isMultipleFiles","itemNames","totalSize","getSize","reduce","accumulator","currentObject","location","multipleFiles","created","modified","performReadOperation","Ajax","result_1","triggerAjaxFailure","parse","send","toFixed","events.afterRequest","rootAliasName","rootName","location_1","RegExp","match","events.searchTextChange","copiedItems","childItem","events.selectionChanged","pop","handleCatchError","visible","nextElementSibling","createdItem","events.createEnd","Array","isArray","pathObject","pathLevel","renamePath","events.renameEndParent","renameText","previousSelected","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","contentDisposition_1","fileName_1","Fetch","onLoad","e","headers","get","filenameMatch","extractedFilename","blob","blobUrl","URL","createObjectURL","link","href","body","status","triggerFetchSuccess","triggerFetchFailure","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","replaceItems","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","restoreFocus","duplicateContent","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","onDeleteSubmit","Internationalization","formatDate","format","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","textContent","which","charCode","createImageDialog","imageData","image","src","alt","fetch_1","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","template","customAttributes","class","initializeCSPTemplate","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","imageEventArgsMap","Map","imageUrlCache","nextFocusIndex","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","imageAttributes","htmlAttributes","itemCreated","onItemCreated","largeIconsTemplate","templateID","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","renderReactTemplates","loadImages","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","_this","imgElement","imageKey","has","imageDetails","set","response","x","z","ondragstart","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","uniqueKey","data-image-key","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","activeItem","getFocusedItem","getActiveItem","onDeleteEnd","focusIndex","addFocus","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","mappedItem","_lastFocused","mappedId","foundIndex","getFirstItem","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","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","triggerSelect","removeClass","details_1","fileOpenArgs","fItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","traverseBackward","CLS.FOCUS","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","pathLabel","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","renderFileFolderIcons","directoryUpload","menuArgs","fileFolderIcon","isDirectory","isFocused","parentItem","menuType","menuCloseArgs","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","navUid","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","itemsToRemove","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","enable","isUniqueId","validItem","checkValidItem","isTree","getItemData","contextMenuSettings","folder","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","uploadSettings","separator","CLS.TB_OPTION_TICK","CLS.ICON_CUT","CLS.TB_OPTION_DOT","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","File","Folder","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","FolderUpload-Access-Message","FileUpload-Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","onScrollHandler","contextmenuModule","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","adjustHeight","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","splitterAdjust","bar","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","chunkSize","retryCount","uploading","onUploading","chunkUploading","onChunkUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","minFileSize","maxFileSize","allowedExtensions","sequentialUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","allowOrDenyUpload","uploadDetails","hasFolder","f","hasFile","autoClose","onChunkUploadComplete","statusText","onInitialEnd","removeEventListeners","wireSelectOnDragEvent","isBind","viewElem","onDragStart","enableRangeSelection","dragX","pageX","dragY","pageY","dragSelectElement","styles","append","onDragStop","onDrag","stopPropagation","diffX","diffY","setStyleAttribute","Math","abs","dragRect","allItems_1","itemRect","right","bottom","setPath","oldProp","requiresRefresh","ajaxSettingSetModel","localeSetModelOption","col","navigationPaneTemplate","refreshing","CLS.RTL","toolbarModule","disableToolbarItems","enableToolbarItems","enableMenuItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","closeDialog","rtl","selectedRowIndex","Complex","Collection","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","tickIcon","viewText","iconClass","firstChild","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","mergedItems","_match","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","__assign","t","s","n","NavigationPane","removeNodes","moveNames","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","nodeTemplate","getDragPath","getDropPath","nodeData","isReact","addChild","prevent","directories","targetDirectory","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","currFiles","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","itemname","checkDropPath","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","isMultiSelect","Grid","Resize","Sort","VirtualScroll","enablePersistence","gridPersistenceValue","localStorage","getItem","model","sortSettings","setItem","checkNameWidth","getColumns","isValidSortField","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","reactTemplateRender","emptyArgs","pane","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","HiddenName","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","intl","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","getDataRows","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","sortIconElement","rowCount","getRows","gridRecords","getCurrentViewRecords","sRecords","Str2","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","gridItems","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","filterPathInSettings","selectedIndex","selectionModule","selectRowsByRange","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","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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"}