@syncfusion/ej2-filemanager 30.1.38 → 30.2.4

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) }, true);\n instance.pathId = getPathId(node);\n instance.pathNames = getPathNames(node, text);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId) {\n var matched = getParents(element, text, false, hasId);\n var path = '/';\n var len = matched.length - (2);\n for (var i = len; i >= 0; i--) {\n path += matched[i] + '/';\n }\n return path;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} node - specifies the node element.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node) {\n var matched = getParents(node, node.getAttribute('data-uid'), true);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text) {\n var matched = getParents(element, text, false);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') :\n select('.' + CLS.LIST_TEXT, el).textContent);\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = '/';\n var i = 1;\n for (i; i < parent.pathId.length; i++) {\n var data = getValue(parent.pathId[parseInt(i.toString(), 10)], parent.feParent);\n newPath += getValue(key, data) + '/';\n }\n parent.setProperties({ path: newPath }, true);\n}\n/**\n * Functions for remove active element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function removeActive(parent) {\n if (parent.isCut) {\n removeBlur(parent);\n parent.selectedNodes = [];\n parent.actionRecords = [];\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n }\n}\n/**\n * Selects active element in File Manager\n *\n * @param {string} action - specifies the action.\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns active element.\n * @private\n */\nexport function activeElement(action, parent) {\n parent.isSearchCut = false;\n parent.actionRecords = [];\n parent.activeElements = [];\n parent.notify(events.cutCopyInit, {});\n if (parent.activeElements.length === 0) {\n return false;\n }\n removeBlur(parent);\n var blurEle = parent.activeElements;\n if (parent.activeModule !== 'navigationpane') {\n parent.targetPath = parent.path;\n }\n else {\n parent.targetPath = getParentPath(parent.path);\n }\n var i = 0;\n if (blurEle) {\n getModule(parent, blurEle[0]);\n if (action === 'cut') {\n while (i < blurEle.length) {\n addBlur(blurEle[i]);\n i++;\n }\n }\n }\n i = 0;\n parent.selectedNodes = [];\n parent.enablePaste = true;\n parent.notify(events.showPaste, {});\n while (i < parent.activeRecords.length) {\n parent.actionRecords.push(parent.activeRecords[i]);\n parent.selectedNodes.push(getValue('name', parent.activeRecords[i]));\n i++;\n }\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) &&\n parent.activeModule !== 'navigationpane') {\n parent.selectedNodes = [];\n parent.isSearchCut = true;\n var i_1 = 0;\n while (i_1 < parent.selectedItems.length) {\n parent.selectedNodes.push(parent.selectedItems[i_1]);\n i_1++;\n }\n }\n return true;\n}\n/**\n * Adds blur to the elements\n *\n * @param {Element} nodes - specifies the nodes.\n * @returns {void}\n * @private\n */\nexport function addBlur(nodes) {\n nodes.classList.add(CLS.BLUR);\n}\n/**\n * Removes blur from elements\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} hover - specifies the hover string.\n * @returns {void}\n * @private\n */\nexport function removeBlur(parent, hover) {\n var blurEle = (!hover) ? parent.element.querySelectorAll('.' + CLS.BLUR) :\n parent.element.querySelectorAll('.' + CLS.HOVER);\n var i = 0;\n while (i < blurEle.length) {\n blurEle[i].classList.remove((!hover) ? CLS.BLUR : CLS.HOVER);\n i++;\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getModule(parent, element) {\n if (element) {\n if (element.classList.contains(CLS.ROW)) {\n parent.activeModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICON)) {\n parent.activeModule = 'largeiconsview';\n }\n else {\n parent.activeModule = 'navigationpane';\n }\n }\n}\n/**\n * Get all child items\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent ID.\n * @returns {Object[]} An array of child items\n * @private\n */\nexport function getAllChildItems(parent, parentId) {\n var children = parent.fileSystemData.filter(function (item) {\n return String(item.parentId) === String(parentId);\n });\n var allChildren = children.slice();\n children.forEach(function (child) {\n var childId = child.id;\n allChildren = allChildren.concat(getAllChildItems(parent, childId));\n });\n return allChildren;\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (isFileSystemData(parent)) {\n if (value === '') {\n parent.itemData = parent.fileSystemData;\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n else {\n parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;\n var currData = getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n var parentId = getValue('id', currData);\n var filteredData = getAllChildItems(parent, parentId);\n var data = new DataManager(filteredData).\n executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));\n var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;\n parent.itemData = data;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchValue, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n return;\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {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 message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\nexport function hasReadAccess(data) {\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\nexport function hasEditAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\nexport function hasContentAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\nexport function hasUploadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\nexport function hasDownloadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n/**\n * Close dialog popup handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function closePopup(parent) {\n if (!isNullOrUndefined(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n}\n/**\n * Get target path from item data.\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} itemData - specifies the item elements.\n * @returns {string} returns the path.\n * @private\n */\nexport function getTargetPath(parent, itemData) {\n if (parent.hasId && !isNOU(getValue('filterId', itemData))) {\n return getValue('filterId', itemData).replace(/\\\\/g, '/').replace(/^[^/]+\\//, '/');\n }\n else {\n return getValue('filterPath', itemData).replace(/\\\\/g, '/');\n }\n}\n/**\n * Access control handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} itemData - specifies the item elements.\n * @param {string} action - specifies the action.\n * @param {boolean} isPathPermision - specifies the path permission.\n * @returns {string} returns the path.\n * @private\n */\nexport function getAccessDetails(parent, itemData, action, isPathPermision) {\n var accessMessage = '';\n for (var i = 0; i < itemData.length; i++) {\n var permission = getValue('permission', itemData[i]);\n if (permission == null) {\n permission = undefined;\n }\n if (isPathPermision) {\n if (permission && (!getValue('read', permission) || !getValue('writeContents', permission))) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', 'writeContents');\n }\n }\n }\n else {\n var copyOrMovePermission = action === 'copy' ? getValue('copy', permission) : getValue('write', permission);\n if (permission && (!getValue('read', permission) || !copyOrMovePermission)) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', action);\n }\n }\n }\n if (accessMessage !== '') {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: '401',\n message: accessMessage,\n fileExists: null\n },\n files: null\n };\n break;\n }\n }\n return accessMessage;\n}\n","import { Ajax, Fetch, createElement, select, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails, getTargetPath } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) {\n return !isNOU(item) && String(item.id) === String(id);\n });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n 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 }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to update child item filter path.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent id.\n * @param {string} oldName - specifies the previous name.\n * @param {string} newName - specifies the new name.\n * @returns {void}\n * @private\n */\nfunction updateChildrenFilterPath(parent, parentId, oldName, newName) {\n parent.fileSystemData.forEach(function (item) {\n if (String(item.parentId) === String(parentId)) {\n var oldPath = item.filterPath;\n var newPath = oldPath.replace(oldName + '\\\\', newName + '\\\\');\n item.filterPath = newPath;\n updateChildrenFilterPath(parent, item.id, oldName, newName);\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target_1 = args.targetData;\n var getTargetFiles = filterByParent(parent, target_1.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target_1.hasChild) {\n target_1.hasChild = !currItem.isFile;\n var targetItem = parent.fileSystemData\n .filter(function (item) { return String(item.id) === String(target_1.id); });\n if (targetItem.length > 0) {\n targetItem[0].hasChild = target_1.hasChild;\n }\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentId) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target_1;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target_1 = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target_1.id;\n fileData.filterPath = target_1.id === 0 ? '\\\\' : target_1.filterPath + target_1.name + '\\\\';\n if (!isNOU(target_1.filterId)) {\n fileData.filterId = target_1.filterId + target_1.id + '/';\n }\n if (!currItem.isFile) {\n updateMovedItemChildren(parent, fileData);\n }\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' || event === 'rename-end-parent'\n ? getValue('path', data) : parent.path;\n var pathArray = filePath.replace(/^\\/|\\/$/g, '').split('/');\n var idValue = event === 'rename-end-parent' || (event === 'path-changed' && getValue('data', data).length !== 0 && isNOU(parent.renamedItem))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n if (action === 'copy') {\n itemData = parent.pasteNodes.map(function (item) { return filterById(parent, item); });\n }\n else {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) || isMultipleFiles ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n if (!isNOU(result.files)) {\n setDateObject(result.files);\n for (var i = 0, len = result.files.length; i < len; i++) {\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n }\n if (location_1.indexOf('\\\\') === -1) {\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function to move operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} itemData - specifies the data.\n * @returns {void}\n * @private\n */\nfunction updateMovedItemChildren(parent, itemData) {\n var childItems = filterByParent(parent, itemData.id);\n childItems.forEach(function (childItem) {\n childItem.filterPath = itemData.filterPath + itemData.name + '\\\\';\n if (!isNOU(itemData.filterId)) {\n childItem.filterId = itemData.filterId + itemData.id + '/';\n }\n if (!childItem.isFile) {\n updateMovedItemChildren(parent, childItem);\n }\n });\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (!isNOU(result.error) && result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: action, result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, action);\n }\n }\n catch (error) {\n handleCatchError(parent, error, action);\n }\n}\n/* istanbul ignore next */\n/**\n * Function for create success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction createSuccess(parent, result, itemName) {\n try {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = isFileSystemData(parent) ? result.files[result.files.length - 1] : result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var createEventArgs = {\n folderName: itemName,\n path: parent.path,\n parentFolder: parent.itemData\n };\n parent.trigger('folderCreate', createEventArgs);\n var args = { action: 'create', result: result };\n parent.trigger('success', args);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.createEnd, parent.path);\n }\n else {\n if (result.error.code === '400') {\n if (parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#newname', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n else {\n var result_2 = {\n files: null,\n error: {\n code: '400',\n message: getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + itemName + '\"'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result_2);\n }\n var args = { action: 'create', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'create');\n }\n }\n }\n catch (error) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'create');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result) {\n try {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n var renameEventArgs = {\n newName: parent.renamedItem.name,\n itemData: [parent.renamedItem],\n path: parent.path\n };\n parent.trigger('rename', renameEventArgs);\n if (parent.activeModule === 'navigationpane') {\n var pathObject = getPathObject(parent);\n var pathLevel = parent.pathId[parent.pathId.length - 1].split('_').length - 2;\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n var renamePath = getTargetPath(parent, parent.renamedItem);\n read(parent, events.renameEndParent, renamePath);\n if (!isNOU(pathObject) && parent.pathNames.length > 1 && pathLevel <= parent.pathNames.length - 1) {\n parent.pathNames[pathLevel] = parent.renameText;\n if (!parent.hasId) {\n parent.setProperties({ path: \"/\" + parent.pathNames.slice(1).join('/') + \"/\" }, true);\n }\n }\n parent.itemData = parent.navigationpaneModule.previousSelected.length > 0\n ? parent.navigationpaneModule.treeObj.getTreeData(parent.navigationpaneModule.previousSelected[0]) : parent.itemData;\n read(parent, events.pathChanged, parent.path);\n parent.itemData[0] = parent.renamedItem;\n parent.renamedItem = null;\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n }\n catch (error) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n try {\n var moveorcopyEventArgs = {\n itemData: result.files,\n isCopy: operation === 'copy' ? true : false,\n path: path,\n targetData: parent.itemData[0],\n targetPath: parent.path\n };\n parent.trigger('move', moveorcopyEventArgs);\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n }\n catch (error) {\n handleCatchError(parent, error, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n try {\n var deleteEventArgs = {\n itemData: result.files,\n path: path\n };\n parent.trigger('delete', deleteEventArgs);\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n try {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(parent, event, path, searchString, showHiddenItems, caseSensitive) {\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var ajaxSettings = {\n url: downloadUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { data: data, cancel: false, useFormPost: true, ajaxSettings: ajaxSettings };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n if (downloadArgs.useFormPost) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n else {\n try {\n var contentDisposition_1;\n var fileName_1;\n var fetch_1 = new Fetch({\n url: getValue('url', downloadArgs.ajaxSettings),\n type: getValue('type', downloadArgs.ajaxSettings),\n contentType: getValue('contentType', downloadArgs.ajaxSettings),\n responseType: getValue('responseType', downloadArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', downloadArgs.ajaxSettings),\n onLoad: function (e) {\n contentDisposition_1 = e.headers.get('Content-Disposition');\n if (contentDisposition_1) {\n var filenameMatch = contentDisposition_1.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/);\n var extractedFilename = filenameMatch && filenameMatch[1];\n fileName_1 = extractedFilename ? extractedFilename.replace(/['\"]/g, '') : fileName_1;\n }\n else {\n fileName_1 = parent.itemData.length > 1 ? 'files.zip' : getValue('isFile', parent.itemData[0]) ? getValue('name', parent.itemData[0]) : getValue('name', parent.itemData[0]) + '.zip';\n }\n },\n onSuccess: function (e) {\n parent.trigger('success', downloadArgs);\n var blob = e;\n var blobUrl = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.href = blobUrl;\n link.download = fileName_1;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.downloadUrl\n }\n };\n createDialog(parent, 'Error', result);\n parent.trigger('failure', downloadArgs);\n }\n });\n fetch_1.send(JSON.stringify(downloadArgs.data));\n }\n catch (error) {\n handleCatchError(parent, error, 'download');\n }\n }\n }\n });\n}\n/**\n * Function for on catch handler in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {any} error - specifies the catch error.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction handleCatchError(parent, error, action) {\n var errorResult = {\n files: null,\n error: {\n message: error.message,\n fileExists: null\n }\n };\n onFailure(parent, errorResult, action);\n}\n/**\n * Function for trigger Fetch success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @returns {void}\n */\nexport function triggerFetchSuccess(parent, ajaxSettings) {\n parent.notify(events.afterRequest, { action: 'success' });\n if (ajaxSettings && typeof getValue('onSuccess', ajaxSettings) === 'function') {\n getValue('onSuccess', ajaxSettings)();\n }\n}\n/**\n * Function for trigger Fetch failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n */\nexport function triggerFetchFailure(parent, ajaxSettings, result) {\n parent.notify(events.afterRequest, { action: 'failure' });\n createDialog(parent, 'Error', result);\n if (typeof getValue('onFailure', ajaxSettings) === 'function') {\n getValue('onFailure', ajaxSettings)();\n }\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization, Fetch } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass, getTargetPath } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details) {\n var options = getOptions(parent, text, e, details);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n var index;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index = val.name.indexOf('.') + 1;\n return (index === 0 && (!val.isFile)) ? 'Folder' : ((index !== 0) ? val.name.substr(index).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] === undefined) {\n strArr = details.name.split(',').map(function (val) {\n index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = '';\n if (parent.activeModule === 'navigationpane') {\n newPath = getTargetPath(parent, parent.itemData[0]);\n }\n else {\n newPath = parent.path;\n }\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {BeforeImageLoadEventArgs} imageData - specifies the image eventargs.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageData) {\n var content = createElement('div', { className: 'e-image-wrap' });\n if (imageData.useImageAsUrl) {\n var image = createElement('img', { className: 'e-image', attrs: { src: imageData.imageUrl, alt: header } });\n content.appendChild(image);\n }\n else {\n var fetch_1 = new Fetch({\n url: getValue('url', imageData.ajaxSettings),\n type: getValue('type', imageData.ajaxSettings),\n contentType: getValue('contentType', imageData.ajaxSettings),\n responseType: getValue('responseType', imageData.ajaxSettings),\n beforeSend: getValue('beforeSend', imageData.ajaxSettings),\n onSuccess: function (e) {\n var blobUrl = URL.createObjectURL(e);\n var image = createElement('img', { className: 'e-image', attrs: { src: blobUrl, alt: header } });\n content.appendChild(image);\n triggerFetchSuccess(parent, imageData.ajaxSettings);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + getValue('url', imageData.ajaxSettings)\n }\n };\n triggerFetchFailure(parent, imageData.ajaxSettings, result);\n }\n });\n var data = getValue('data', imageData.ajaxSettings);\n fetch_1.send(data);\n }\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\n template: '<span class=\"e-fe-text\">${name}</span>',\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"chunkSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable, Fetch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout, getLocaleText } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.imageEventArgsMap = new Map();\n this.imageUrlCache = new Map();\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', imageAttributes: '_fm_imageAttr', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n 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);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\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.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n if (txt.indexOf(type) !== -1) {\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n }\n this.renderCheckbox(args);\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imageData = getImageUrl(this.parent, items[i]);\n if (imageData.useImageAsUrl) {\n setValue('_fm_imageUrl', imageData.imageUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n var uniqueKey = \"img_\" + name_1 + \"_\" + i;\n this.imageEventArgsMap.set(uniqueKey, imageData);\n setValue('_fm_imageUrl', '', items[i]);\n setValue('_fm_imageAttr', { alt: name_1, class: 'e-list-img image-blur', 'data-image-key': uniqueKey }, items[i]);\n }\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem && this.parent.activeModule === 'largeiconsview') {\n this.clearSelect();\n this.addSelection(this.parent.renamedItem);\n }\n }\n };\n LargeIconsView.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'largeiconsview') {\n this.doOpenAction(args.target);\n }\n };\n LargeIconsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'LargeIcons' && this.element) {\n this.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n LargeIconsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.startItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n var eveArgs = { ctrlKey: true, shiftKey: true };\n this.doSelection(lastItem, eveArgs);\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.clearSelection();\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n LargeIconsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onSearch = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n this.parent.searchedItems = args.files;\n this.onLayoutChange(args);\n }\n };\n LargeIconsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n };\n LargeIconsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.updateSelectedData();\n };\n LargeIconsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'LargeIcons' && !isNOU(this.listObj) &&\n this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered\n && this.parent.sortBy === 'filterPath') {\n this.parent.sortBy = 'name';\n this.parent.notify(events.sortByChange, {});\n }\n };\n LargeIconsView.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.search, this.onSearch);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.splitterResize, this.splitterResizeHandler);\n this.parent.off(events.resizeEnd, this.resizeHandler);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n this.parent.off(events.filterEnd, this.onPathChanged);\n };\n LargeIconsView.prototype.addEventListener = function () {\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.search, this.onSearch, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.splitterResize, this.splitterResizeHandler, this);\n this.parent.on(events.resizeEnd, this.resizeHandler, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n };\n LargeIconsView.prototype.onActionFailure = function () { this.isInteraction = true; this.isInteracted = true; };\n LargeIconsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var ele = closest(args.target, 'li');\n this.parent.itemData = [this.getItemObject(ele)];\n }\n };\n LargeIconsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.updateSelectedData();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n LargeIconsView.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath === '') ? [getPathObject(this.parent)] :\n [this.getItemObject(select('.e-active', this.element))];\n }\n };\n LargeIconsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeRecords = [];\n this.parent.activeElements = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.activeElements.push(activeEle[i]);\n this.parent.activeRecords.push(this.getItemObject(activeEle[i]));\n }\n }\n };\n LargeIconsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n LargeIconsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n LargeIconsView.prototype.onPropertyChanged = function (e) {\n var currentSelected;\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'selectedItems':\n this.isInteraction = false;\n this.isInteracted = false;\n currentSelected = isNOU(this.parent.selectedItems) ? [] : this.parent.selectedItems.slice(0);\n currentSelected = this.parent.allowMultiSelection ? currentSelected :\n currentSelected.slice(currentSelected.length - 1);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onClearAllInit();\n if (currentSelected.length) {\n this.selectItems(currentSelected);\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n this.isInteraction = true;\n this.isInteracted = true;\n break;\n case 'showThumbnail':\n refresh(this.parent);\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n case 'showItemCheckBoxes':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n if (_this.parent.isDevice) {\n _this.tapCount = eve.tapCount;\n _this.tapEvent = eve;\n setTimeout(function () {\n if (_this.tapCount > 0) {\n _this.doTapAction(_this.tapEvent);\n }\n _this.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n _this.dblClickHandler(eve);\n }\n else {\n _this.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n _this.multiSelect = _this.parent.allowMultiSelection ? true : false;\n if (_this.parent.allowMultiSelection) {\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n _this.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var ctrlKey = this.parent.isMac ? e.metaKey : e.ctrlKey;\n var isMacRightClick = this.parent.isMac && e.ctrlKey && e.shiftKey;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if ((e.which === 3 || isMacRightClick) && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.addActive(item);\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (ctrlKey && e.shiftKey && !isMacRightClick) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey && !isMacRightClick) {\n if (!(e && ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var text = getValue('name', details_1);\n if (!_this.parent.isFile) {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imageData = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imageData);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n LargeIconsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.FOCUS, this.element);\n };\n LargeIconsView.prototype.getActiveItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n };\n LargeIconsView.prototype.getFirstItem = function () {\n return this.itemList[0];\n };\n LargeIconsView.prototype.getLastItem = function () {\n return this.itemList[this.itemList.length - 1];\n };\n LargeIconsView.prototype.navigateItem = function (item) {\n this.setFocus(item);\n };\n LargeIconsView.prototype.navigateDown = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards, this.perRow);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.navigateRight = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.getNextItem = function (li, isTowards, perRow) {\n if (isNOU(li)) {\n return this.getFocusedItem() || this.getActiveItem() || this.getFirstItem();\n }\n var index = this.itemList.indexOf(li);\n var nextItem;\n do {\n if (isTowards) {\n index = perRow ? index + perRow : index + 1;\n }\n else {\n index = perRow ? index - perRow : index - 1;\n }\n nextItem = this.itemList[index];\n if (this.parent.enableVirtualization && isNOU(nextItem)) {\n var marginValue = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-bottom'), 10);\n var scrollHeight = this.itemList[0].getBoundingClientRect().height + marginValue;\n this.element.firstElementChild.scrollTo(this.element.firstElementChild.scrollTop, this.element.firstElementChild.scrollTop + scrollHeight);\n }\n if (isNOU(nextItem)) {\n return li;\n }\n } while (!isVisible(nextItem));\n return nextItem;\n };\n LargeIconsView.prototype.setFocus = function (nextItem) {\n if (!isNOU(nextItem)) {\n var fileSelectionArgs = this.triggerSelection('select', nextItem);\n if (fileSelectionArgs.cancel !== true) {\n this.startItem = nextItem;\n this.clearSelect();\n this.addActive(nextItem);\n this.addFocus(nextItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', nextItem);\n }\n }\n };\n LargeIconsView.prototype.spaceKey = function (fItem) {\n if (!isNOU(fItem) && !fItem.classList.contains(CLS.ACTIVE)) {\n var fileSelectionArgs = this.triggerSelection('select', fItem);\n if (fileSelectionArgs.cancel !== true) {\n this.addActive(fItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', fItem);\n }\n }\n };\n LargeIconsView.prototype.ctrlAKey = function (firstItem, lastItem) {\n if (this.parent.allowMultiSelection && !isNOU(firstItem)) {\n this.startItem = firstItem;\n var eveArgs = { ctrlKey: true, shiftKey: true };\n var liParent = this.element.querySelector('.' + CLS.LIST_PARENT);\n var liScrPos = liParent.scrollTop;\n var getCurFocusedItem = this.getFocusedItem();\n this.doSelection(lastItem, eveArgs);\n liParent.scrollTop = liScrPos;\n if (!isNOU(getCurFocusedItem)) {\n this.addFocus(getCurFocusedItem);\n }\n }\n };\n LargeIconsView.prototype.csEndKey = function (lastItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(lastItem);\n }\n else if (!isNOU(lastItem)) {\n if (e.action === 'ctrlEnd') {\n this.addFocus(lastItem);\n }\n else {\n this.doSelection(lastItem, e);\n }\n }\n };\n LargeIconsView.prototype.csHomeKey = function (firstItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(firstItem);\n }\n else if (!isNOU(firstItem)) {\n if (e.action === 'ctrlHome') {\n this.addFocus(firstItem);\n }\n else {\n this.doSelection(firstItem, e);\n }\n }\n };\n LargeIconsView.prototype.csDownKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, true);\n }\n else {\n var dItem = this.getNextItem(fItem, true, this.perRow);\n if (!isNOU(dItem)) {\n if (e.action === 'ctrlDown') {\n this.addFocus(dItem);\n }\n else {\n this.doSelection(dItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csLeftKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, false);\n }\n else {\n var lItem = this.getNextItem(fItem, false);\n if (!isNOU(lItem)) {\n if (e.action === 'ctrlLeft') {\n this.addFocus(lItem);\n }\n else {\n this.doSelection(lItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csRightKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, true);\n }\n else {\n var rItem = this.getNextItem(fItem, true);\n if (!isNOU(rItem)) {\n if (e.action === 'ctrlRight') {\n this.addFocus(rItem);\n }\n else {\n this.doSelection(rItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csUpKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, false);\n }\n else {\n var uItem = this.getNextItem(fItem, false, this.perRow);\n if (!isNOU(uItem)) {\n if (e.action === 'ctrlUp') {\n this.addFocus(uItem);\n }\n else {\n this.doSelection(uItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.addActive = function (nextItem) {\n if (!isNOU(nextItem)) {\n if (!nextItem.classList.contains(CLS.ACTIVE)) {\n this.parent.selectedItems.push(this.getDataName(nextItem));\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n addClass([nextItem], [CLS.ACTIVE]);\n nextItem.setAttribute('aria-selected', 'true');\n this.checkState(nextItem, true);\n }\n this.parent.visitedItem = nextItem;\n }\n };\n LargeIconsView.prototype.removeActive = function (preItem) {\n if (!isNOU(preItem)) {\n removeClass([preItem], [CLS.ACTIVE]);\n if (this.parent.allowMultiSelection) {\n preItem.setAttribute('aria-selected', 'false');\n }\n else {\n preItem.removeAttribute('aria-selected');\n }\n this.checkState(preItem, false);\n var index = this.parent.selectedItems.indexOf(this.getDataName(preItem));\n if (index > -1) {\n this.parent.selectedItems.splice(index, 1);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n this.parent.visitedItem = null;\n }\n };\n LargeIconsView.prototype.getDataName = function (item) {\n var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.splitterResizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.getItemCount = function () {\n var perRow = 1;\n if (this.itemList) {\n for (var i = 0, len = this.itemList.length - 1; i < len; i++) {\n if (this.itemList[i].getBoundingClientRect().top === this.itemList[i + 1].getBoundingClientRect().top) {\n perRow++;\n }\n else {\n break;\n }\n }\n }\n this.perRow = perRow;\n };\n LargeIconsView.prototype.triggerSelection = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null\n : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data\n : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n LargeIconsView.prototype.addSelection = function (data) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var newData = new DataManager(this.items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (newData.length > 0) {\n resultData = new DataManager(newData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n var index = this.items.indexOf(resultData[0]);\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[index], eveArgs);\n }\n };\n LargeIconsView.prototype.updateSelectedData = function () {\n var data = [];\n var items = selectAll('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n for (var i = 0; i < items.length; i++) {\n data[i] = this.getItemObject(items[i]);\n }\n this.parent.itemData = data;\n };\n LargeIconsView.prototype.onMethodCall = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n var action = getValue('action', args);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', args));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', args));\n break;\n case 'openFile':\n this.openFile(getValue('id', args));\n break;\n case 'renameFile':\n this.isInteraction = false;\n this.isInteracted = false;\n this.renameFile(getValue('id', args), getValue('newName', args));\n break;\n case 'createFolder':\n this.isInteraction = false;\n this.isInteracted = false;\n break;\n case 'clearSelection':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onClearAllInit();\n break;\n case 'selectAll':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onSelectAllInit();\n break;\n }\n };\n LargeIconsView.prototype.getItemsIndex = function (items) {\n var indexes = [];\n var isFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filterName = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !isFilter) {\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filterName, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n }\n else {\n for (var i = 0, len = this.items.length; i < len; i++) {\n var name_2 = getValue('filterPath', this.items[i]) + getValue('name', this.items[i]);\n if ((items.indexOf(name_2) !== -1) || (items.indexOf(getValue(filterName, this.items[i])) !== -1)) {\n indexes.push(i);\n }\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var indexes = this.getItemsIndex(ids);\n if (indexes.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < indexes.length; i++) {\n data[i] = this.items[indexes[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var index = this.getItemsIndex(ids);\n if (index.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < index.length; i++) {\n data[i] = this.items[index[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n this.doOpenAction(this.itemList[indexes[0]]);\n }\n };\n LargeIconsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n updateRenamingData(this.parent, this.items[indexes[0]]);\n if (isNOU(name)) {\n doRename(this.parent);\n }\n else {\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n rename(this.parent, this.parent.path, name);\n }\n }\n }\n };\n return LargeIconsView;\n}());\nexport { LargeIconsView };\n","import { EventHandler, closest, isNullOrUndefined, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, addClass, removeClass, remove, createElement } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { read } from '../common/operations';\nimport { getLocaleText, searchWordHandler } from '../common/utility';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * BreadCrumbBar module\n */\nvar BreadCrumbBar = /** @class */ (function () {\n /**\n * constructor for addressbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies parent element.\n * @private\n *\n */\n function BreadCrumbBar(parent) {\n this.addressPath = '';\n this.addressBarLink = '';\n this.searchTimer = null;\n this.searchWrapWidth = null;\n this.parent = parent;\n this.keyConfigs = {\n enter: 'enter'\n };\n this.render();\n }\n BreadCrumbBar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var value = e.newProp.searchSettings;\n switch (prop) {\n case 'searchSettings':\n if (!isNullOrUndefined(value.allowSearchOnTyping)) {\n this.searchEventBind(value.allowSearchOnTyping);\n }\n if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&\n !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&\n isNullOrUndefined(value.ignoreCase))) {\n searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);\n }\n break;\n }\n }\n };\n BreadCrumbBar.prototype.render = function () {\n this.addEventListener();\n };\n BreadCrumbBar.prototype.onPathChange = function () {\n var pathNames = this.parent.pathNames;\n var paths = this.parent.path.split('/');\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var addressbarLI = null;\n var pathNamesLen = pathNames.length;\n if (pathNames.length > 0) {\n var id = '';\n for (var i = 0; i < pathNamesLen; i++) {\n var addressATag = null;\n addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });\n for (var j = 0; j <= i; j++) {\n id = id + paths[j] + '/';\n }\n addressbarLI.setAttribute('data-utext', id);\n if (i !== 0) {\n var icon = createElement('span', { className: CLS.ICONS });\n addressbarLI.appendChild(icon);\n }\n if (pathNamesLen - i !== 1) {\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressbarLI.setAttribute('tabindex', '0');\n }\n else {\n addressATag = createElement('span', { className: CLS.LIST_TEXT });\n }\n id = '';\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n };\n ContextMenu.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: false,\n element: args.element,\n event: args.event,\n isFocused: args.isFocused,\n fileDetails: [this.menuItemData],\n items: args.items,\n parentItem: args.parentItem,\n menuType: this.menuType\n };\n this.parent.trigger('menuClose', eventArgs, function (menuCloseArgs) {\n if (menuCloseArgs.cancel) {\n args.cancel = menuCloseArgs.cancel;\n return;\n }\n });\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule === 'navigationpane') {\n this.parent.pathId.pop();\n var parentKey = [];\n var itemKeys = Object.keys(this.parent.feParent);\n for (var _i = 0, itemKeys_1 = itemKeys; _i < itemKeys_1.length; _i++) {\n var item = itemKeys_1[_i];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var itemData = getValue(item, this.parent.feParent);\n if (this.parent.pathNames.indexOf(itemData.name) !== -1) {\n parentKey.push(itemData._fm_id);\n }\n }\n this.parent.pathId.push(parentKey[parentKey.length - 1]);\n this.parent.navigationpaneModule.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n var selected = false;\n var uid;\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest('div');\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('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 === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n 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 'upload':\n uploadItem(_this.parent);\n break;\n case 'name':\n case 'size':\n case 'date':\n case 'ascending':\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.split(' ').join('').toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, detach, selectAll, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem, closePopup } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.existingFileCount = 0;\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not\n _this.isMac = false;\n _this.dragSelectedItems = [];\n _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 fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onChunkUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n if (this.uploadSettings.chunkSize === 0) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n FileManager.prototype.onChunkUploadComplete = function (files) {\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n var uploadFile = !isNullOrUndefined(files) ? getValue('file', files).name : '';\n if (uploadFile === this.retryArgs[i].file.name) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadSuccess = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadFailure = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') !== -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireSelectOnDragEvent = function (isBind) {\n if (isNOU(this.view)) {\n return;\n }\n if (isBind) {\n this.viewElem = this.view === 'LargeIcons' ? this.largeiconsviewModule.element : this.element.querySelector('.e-gridcontent');\n }\n if (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 item.querySelector('.e-frame').classList.add('e-check');\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 }\n }\n if (requiresRefresh) {\n this.refresh();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n this.viewElem = null;\n this.dragSelectElement = null;\n this.dragSelectedItems = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Enables the specified menu items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.enableItems(items, true, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Specifies the method that must be invoked to traverse the path backwards in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.traverseBackward = function () {\n if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {\n this.pathId.pop();\n this.pathNames.pop();\n var newPath = this.pathNames.slice(1).join('/');\n newPath = newPath === '' ? '/' : '/' + newPath + '/';\n this.setProperties({ path: newPath }, true);\n read(this, events.pathChanged, this.path);\n var treeNodeId = this.pathId[this.pathId.length - 1];\n this.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the method which must be invoked to programmatically close the dialog popup in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.closeDialog = function () {\n closePopup(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property([])\n ], FileManager.prototype, \"fileSystemData\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableRangeSelection\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeFolderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"folderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDelete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"delete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeRename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"rename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeMove\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"move\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"search\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n var _this = this;\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan_1 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan_1 = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>',\n beforeItemRender: function (args) {\n var tickIcon = args.item.iconCss;\n var viewText = args.item.text === getLocaleText(_this.parent, 'View-LargeIcons');\n var iconClass = tickIcon ? ' e-menu-icon ' + tickIcon : '';\n args.element.innerHTML = '<span class=\"' + iconClass + '\"></span>' + (viewText ? largeIconSpan_1 : gridSpan_1) + args.item.text;\n var span = args.element.firstChild;\n if (span && span.className === '') {\n args.element.removeChild(span);\n }\n }\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = Object.assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n if (this.itemList.length !== 0 && this.largeIconInstance.element.querySelector('.' + CLS.EMPTY)) {\n this.largeIconInstance.element.removeChild(this.largeIconInstance.element.querySelector('.' + CLS.EMPTY));\n }\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add('e-virtual-top');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add('e-virtual-bottom');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n *\n * @param {number} dataSourceLength The length of the data source.\n * @returns {number} The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount =\n Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) /\n (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount *\n (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength || itemCount === 0) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n *\n * @param {boolean} destroy - Set `true` to unwire the scroll event.\n * @returns {void}\n */\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n // Wire the scroll event\n EventHandler.add(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll, this);\n }\n else {\n // Unwire the scroll event\n EventHandler.remove(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll);\n }\n };\n /**\n * Handles the scroll event for the list element.\n * This method updates the top and bottom elements and the displayed items based on the scroll position.\n *\n * @returns {void}\n * @private\n */\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n // Set the starting height to 0\n var startingHeight = 0;\n // Get the current scroll position\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n // Calculate the height of the top element\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n // Calculate the height of the bottom element\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n // If the scroll position is less than or equal to the total height, set the top and bottom element heights.\n // Otherwise, set the top element height to the total height and the bottom element height to 0.\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n // If the top element height has changed, update the top and bottom element heights and re-render the items.\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n // Check whether the scroll direction is upward or downward\n if (scroll > this.scrollPosition) {\n // Scrolling is upward\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n this.onNormalScroll(listDiff, true);\n }\n else {\n // Scrolling is downward\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n this.onNormalScroll(listDiff, false);\n }\n }\n // Update the list difference and scroll position variables\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n this.scrollPosition = scroll;\n // Update the list of items and the items property of the largeIconInstance\n this.largeIconInstance.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.largeIconInstance.element));\n this.itemCount = this.itemCount !== this.largeIconInstance.itemList.length ?\n this.largeIconInstance.itemList.length : this.itemCount;\n this.largeIconInstance.items = this.largeIconInstance.allItems.slice(this.renderedCount -\n this.itemCount, this.renderedCount);\n };\n /**\n * Calculates the current scroll position of the list element.\n *\n * @param {number} startingHeight The starting height from which to calculate the scroll position.\n * @returns {number} The current scroll position.\n * @private\n */\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n // If the scroll position is less than or equal to the starting height, return 0.\n // Otherwise, return the scroll position minus the starting height.\n return ((this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight) <= 0) ? 0 :\n (this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight);\n };\n /**\n * This method updates the displayed items and the selection based on the scroll direction.\n *\n * @param {number} listDiff The number of rows to update.\n * @param {boolean} isScrollingDown If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\n */\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n // Update the displayed items\n for (var i = 0; i < listDiff; i++) {\n this.updateUI(isScrollingDown);\n }\n };\n /**\n * Updates the items in the large icons view.\n *\n * @param {boolean} isScrollingDown - If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\n */\n Virtualization.prototype.updateUI = function (isScrollingDown) {\n var _this = this;\n if (isScrollingDown) {\n // Get the next batch of items to be displayed\n this.items = this.largeIconInstance.allItems.slice(this.renderedCount, this.renderedCount + this.rowItemCount);\n // If there are items to be displayed, create list elements for them and append them to the list\n if (this.items.length > 0) {\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n this.itemList.forEach(function (liEle) {\n _this.largeIconInstance.element.firstElementChild.insertBefore(liEle, _this.bottomElement);\n });\n // Update the rendered count variable\n this.renderedCount = (this.largeIconInstance.allItems.length >= this.renderedCount + this.rowItemCount) ?\n this.renderedCount + this.rowItemCount : this.renderedCount + this.lastRowCount;\n // Remove the first batch of items from the list\n for (var i = 0; i < this.rowItemCount; i++) {\n detach(this.topElement.nextElementSibling);\n }\n }\n }\n else {\n // Scrolling up\n var lastItemIndex = void 0;\n var isAllRendered = void 0;\n if (this.renderedCount === this.largeIconInstance.allItems.length) {\n // Set lastItemIndex to the last item in the last row\n lastItemIndex = this.renderedCount - (this.itemCount - this.rowItemCount + this.lastRowCount);\n // Set renderedCount to the total number of items that have been rendered, except for the items in the last row\n this.renderedCount = ((this.renderedCount - this.lastRowCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.lastRowCount);\n // Set isAllRendered to true to indicate that all items have been rendered\n isAllRendered = true;\n }\n else {\n // Set lastItemIndex to the last item in the current row\n lastItemIndex = this.renderedCount - this.itemCount;\n // Set renderedCount to the total number of items that have been rendered, except for the items in the current row\n this.renderedCount = ((this.renderedCount - this.rowItemCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.rowItemCount);\n }\n // Set startItemIndex to the first item in the current or previous row\n var startItemIndex = (lastItemIndex - this.rowItemCount > 0) ? lastItemIndex - this.rowItemCount : 0;\n // Set the items array to the items in the current or previous row\n this.items = this.largeIconInstance.allItems.slice(startItemIndex, lastItemIndex);\n if (this.items.length > 0) {\n // Create a list of elements from the items array\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n // Set the itemList array to the list items in the list elements\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Add the items to the beginning of the list\n for (var len = this.itemList.length; len > 0; len--) {\n this.largeIconInstance.element.firstElementChild.insertBefore(this.itemList[len - 1], this.topElement.nextElementSibling);\n }\n // Remove the last row of items from the list\n for (var i = 0; i < ((isAllRendered) ? this.lastRowCount : this.rowItemCount); i++) {\n detach(this.bottomElement.previousElementSibling);\n }\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n /**\n * Destroys the component.\n *\n * @returns {void}\n */\n Virtualization.prototype.destroy = function () {\n // If the file manager has already been destroyed, return immediately\n if (this.filemanagerInstance.isDestroyed) {\n return;\n }\n // If the large icon element has a child element, unwire the scroll event\n if (!isNullOrUndefined(this.largeIconInstance.element.firstElementChild)) {\n this.wireScrollEvent(true);\n }\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete, isFileSystemData } from '../common/operations';\nimport { createDialog } from '../pop-up/dialog';\nimport { updatePath, getPath, getDirectories } from '../common/utility';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getDirectoryPath, getModule, getPathId } from '../common/index';\nimport { copyFiles, cutFiles, removeActive, pasteHandler, getParentPath, readDropPath } from '../common/index';\nimport { hasEditAccess, createDeniedDialog, hasDownloadAccess, getAccessClass } from '../common/index';\n/**\n * NavigationPane module\n */\nvar NavigationPane = /** @class */ (function () {\n /**\n * Constructor for the TreeView module\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n /* istanbul ignore next */\n function NavigationPane(parent) {\n this.removeNodes = [];\n this.moveNames = [];\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = [];\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n var directories = getDirectories(files);\n var targetDirectory = this.getTreeData(target);\n if (directories.length > 0 && targetDirectory.length > 0 &&\n (directories[0].filterPath == null ||\n isNOU(targetDirectory[0])\n && targetDirectory[0].filterPath == null\n || directories[0].filterPath !==\n targetDirectory[0].filterPath)) {\n var length_1 = 0;\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line camelcase\n folders[parseInt(length_1.toString(), 10)]._fm_icon = 'e-fe-folder';\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick &&\n !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked || this.isPathDragged) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.isPathDragged = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.setProperties({ selectedNodes: [node.getAttribute('data-uid')] });\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.selectedItems = [];\n this.parent.itemData = nodeData;\n var previousPath = this.parent.path;\n if (!this.isRightClick && this.isSameNodeClicked) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.isNodeClickCalled = true;\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onPathDrag = function (args) {\n this.isPathDragged = true;\n this.selectResultNode(args[0]);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpand = function (args) {\n if (!args.isInteracted && !this.isDrag) {\n return;\n }\n if (args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.isNodeExpandCalled = true;\n var text = getValue('text', args.nodeData);\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? text : id;\n var path = getPath(args.node, newText, isId);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], true);\n }\n this.expandNodeTarget = '';\n }\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.setProperties({ selectedNodes: [sleId] });\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.addChild(args.files, id, false);\n this.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = this.previousSelected.length > 0 && this.treeObj.getTreeData(this.previousSelected[0]).length !== 0\n ? this.previousSelected[0] : getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n this.updateItemData();\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEnd = function (args) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.updateTree(args);\n }\n else {\n var data = this.treeObj.getTreeData();\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(data).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(data).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.currentItemText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n this.renameParent = getValue(this.treeObj.fields.parentID, resultData[0]);\n this.parent.expandedId = this.renameParent;\n this.parent.itemData = this.getTreeData(this.renameParent);\n read(this.parent, events.renameEndParent, this.parent.filterPath.replace(/\\\\/g, '/'));\n }\n }\n };\n NavigationPane.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.addDragDrop();\n break;\n case 'navigationPaneSettings':\n read(this.parent, events.finalizeEnd, this.parent.path);\n if (e.oldProp.navigationPaneSettings.sortOrder !== e.newProp.navigationPaneSettings.sortOrder) {\n this.treeObj.sortOrder = e.newProp.navigationPaneSettings.sortOrder;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDownLoadInit = function () {\n this.doDownload();\n };\n NavigationPane.prototype.onSelectionChanged = function (e) {\n this.treeObj.setProperties({ selectedNodes: [e.selectedNode] });\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n if (isFileSystemData(this.parent)) {\n this.moveNames = [];\n var obj = this.parent.dragData;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n }\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n if (!obj || !Array.isArray(obj)) {\n return;\n }\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n NavigationPane.prototype.getTreeData = function (args) {\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var node = select('[data-uid=\"' + this.parent.pathId[this.parent.pathId.length - 1] + '\"]', this.treeObj.element);\n updatePath(node, this.parent.itemData[0], this.parent);\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\nimport { removeBlur, openAction, getImageUrl, fileType, getSortedData, getLocaleText, updateLayout } from '../common/utility';\nimport { createEmptyElement } from '../common/utility';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { cutFiles, addBlur, openSearchFolder, copyFiles, removeActive, pasteHandler, getPathObject, getName } from '../common/index';\nimport { hasReadAccess, hasEditAccess, hasDownloadAccess, doRename, getAccessClass, createDeniedDialog, rename } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule, getFullPath } from '../common/index';\nimport { getDirectoryPath, updateRenamingData, getItemName, doDeleteFiles, doDownloadFiles } from '../common/index';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * DetailsView module\n */\nvar DetailsView = /** @class */ (function () {\n /**\n * Constructor for the GridView module\n *\n * @param {FileManager} parent - specifies the parent.\n * @hidden\n */\n function DetailsView(parent) {\n this.isInteracted = true;\n this.interaction = true;\n this.isPasteOperation = false;\n this.isColumnRefresh = false;\n this.dragObj = null;\n this.startIndex = null;\n this.firstItemIndex = null;\n this.isSelectionUpdate = false;\n this.currentSelectedItem = [];\n this.count = 0;\n this.isRendered = true;\n this.isLoaded = false;\n this.isNameWidth = false;\n this.isMultiSelect = false;\n this.pasteOperation = false;\n this.uploadOperation = false;\n Grid.Inject(Resize, ContextMenu, Sort, VirtualScroll);\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.GRID_ID, this.parent.element);\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n tab: 'tab',\n moveDown: 'downarrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n ctrlUp: 'ctrl+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n end: 'end',\n home: 'home',\n moveUp: 'uparrow',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n back: 'backspace'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n var _this = this;\n if (this.parent.enablePersistence) {\n var gridPersistenceValue = window.localStorage.getItem('grid' + this.parent.element.id + '_grid');\n if (!isNOU(gridPersistenceValue)) {\n var model = JSON.parse(gridPersistenceValue);\n if (!isNOU(model) && Object.keys(model).length > 0 && 'sortSettings' in model) {\n delete model.sortSettings;\n window.localStorage.setItem('grid' + this.parent.element.id + '_grid', JSON.stringify(model));\n }\n }\n }\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.parent.sortBy; }) !== -1;\n if (this.parent.isMobile || !isValidSortField) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick'\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n load: function () {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n if (this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization && this.parent.enablePersistence) {\n this.isLoaded = true;\n }\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {number} - The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n var enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return \"<div class=\\\"e-fe-text\\\">\" + name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div><span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n var _loop_1 = function (i, len) {\n columns[i].headerText = getLocaleText(this_1.parent, columns[i].headerText);\n if (columns[i].field === 'name' && !isNOU(columns[i].template) && !(typeof columns[i].template === 'function')) {\n var template_1 = columns[i].template;\n columns[i].template = initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return template_1.replace(/\\${name}/g, name);\n });\n }\n };\n var this_1 = this;\n for (var i = 0, len = columns.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n if (this.parent.enableRangeSelection) {\n var HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };\n columns.push(HiddenName);\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var text = getValue('name', args.data);\n var textEle = args.row.querySelector('[title= \"' + text + '\"]');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n if (name_1.indexOf(type) !== -1) {\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n var _this = this;\n showSpinner(this.parent.element);\n var nameColumn = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === _this.parent.sortBy; });\n if (nameColumn && !('sortComparer' in nameColumn)) {\n var items = getSortedData(this.parent, (this.parent.enableVirtualization)\n ? args.result\n : this.gridObj.dataSource);\n args.result = items;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) || 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 };\n DetailsView.prototype.selectRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && !this.parent.hasId && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n DetailsView.prototype.addSelection = function (data) {\n var items = this.gridObj.getCurrentViewRecords();\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showItemCheckBoxes':\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var pathField = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === 'filterPath'; });\n if ((this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) ||\n (!isNullOrUndefined(pathField) && !isNullOrUndefined(pathField.hideAtMedia) && pathField.hideAtMedia !== '')) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.wireClickEvent(true);\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imageData = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imageData);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n var filterPathInSettings = this.parent.detailsViewSettings.columns.some(function (col) { return col.field === 'filterPath'; });\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath') && !filterPathInSettings) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else {\n gridHeaderColGroup.children[i].style.width = '180px';\n gridContentColGroup.children[i].style.width = '180px';\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && isNullOrUndefined(this.dragObj)) {\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n var info = null;\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n if (!this.isMultiSelect) {\n this.isMultiSelect = true;\n if ((args.isShiftPressed || args.isCtrlPressed) && !this.parent.allowMultiSelection && (args.target && args.target.parentElement && !args.target.parentElement.classList.contains('e-checkbox-wrapper'))) {\n args.cancel = true;\n var rowIndex = (args && args.rowIndexes)\n ? args.rowIndexes[args.rowIndexes.length - 1]\n : args.rowIndex;\n this.gridObj.selectRow(rowIndex);\n }\n this.isMultiSelect = false;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n var item = this.gridObj.getRowByIndex(args.rowIndex);\n if (!isNOU(item)) {\n item.removeAttribute('tabindex');\n }\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n _this.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (_this.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', _this.parent.allowMultiSelection, _this.gridObj.selectionModule);\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = _this.gridObj.getRows().indexOf(row);\n _this.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.onBlur = function (e) {\n if ((e.relatedTarget !== null && closest(e.relatedTarget, '.e-grid') !== e.relatedTarget)) {\n return;\n }\n if (!isNOU(this.gridObj.element)) {\n var thElements = this.gridObj.element.querySelectorAll('th');\n for (var i = 0; i < thElements.length; i++) {\n if (thElements[i].classList.contains('e-focus')) {\n this.addFocus(null);\n }\n }\n }\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('aria-rowindex'), 10) - 1 : null;\n };\n /* istanbul ignore next */\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1 && this.gridObj.allowSorting === true) {\n if (!e.target.classList.contains('e-fe-grid-icon')) {\n var direction = !e.target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n var currentField = this.gridObj.getColumnByUid(e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid')).field;\n this.gridObj.sortColumn(currentField, direction);\n if (!isNOU(this.getFocusedItem().nextSibling)) {\n this.getFocusedItem().nextSibling.setAttribute('tabindex', '0');\n }\n }\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else {\n this.addHeaderFocus(e);\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function (e) {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus;\n if (!isNOU(e.target) && e.target.classList.contains('e-defaultcursor')) {\n this.addFocus(0);\n nameFocus = e.target.nextElementSibling;\n }\n else if (!isNOU(this.gridObj.element.querySelector('.e-focus')) && (this.gridObj.element.querySelector('.e-focus').tagName === 'TH')) {\n nameFocus = this.gridObj.element.querySelector('.e-focus').nextElementSibling;\n this.addFocus(0);\n }\n else {\n nameFocus = select('th.e-fe-grid-icon', this.element);\n }\n if (!isNOU(nameFocus)) {\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n DetailsView.prototype.getRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["sortComparer","reference","comparer","referenceIsFile","test","comparerIsFile","referenceParts","comparerParts","replace","_","$1","$2","push","Infinity","length","referencePart","shift","comparerPart","comparisonResult","localeCompare","updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","ids","names","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","parseInt","toString","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","getAllChildItems","parentId","children","fileSystemData","filter","item","String","allChildren","slice","forEach","child","childId","concat","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","isFileSystemData","itemData","read","events.layoutChange","events.search","searchSettings","filterType","currData","filteredData","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","Search","showHiddenItems","getPathObject","caseSensitive","hiddenItems","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","imgUrl","eventArgs_1","fileDetails","imageUrl","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","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","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","navigationpaneModule","treeObj","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","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","responseData","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","isFileExists","some","findIndexById","findIndex","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","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","getTreeData","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","contentDisposition_1","fileName_1","Fetch","onLoad","e","headers","get","filenameMatch","extractedFilename","blob","blobUrl","URL","createObjectURL","link","href","body","status","triggerFetchSuccess","triggerFetchFailure","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","replaceItems","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","onDeleteSubmit","Internationalization","formatDate","format","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","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","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","imageEventArgsMap","Map","imageUrlCache","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","imageAttributes","htmlAttributes","itemCreated","onItemCreated","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","loadImages","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","_this","imgElement","imageKey","has","imageDetails","set","response","x","z","ondragstart","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","uniqueKey","data-image-key","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","clickObj","Touch","tap","eve","isDevice","tapEvent","doTapAction","originalEvent","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","metaKey","isMacRightClick","cList","addActive","CLS.CHECK","triggerSelection","startIndex","endIndex","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","traverseBackward","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","getPropertyValue","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","isFocused","parentItem","menuType","menuCloseArgs","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","navUid","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","itemsToRemove","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","enable","isUniqueId","validItem","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","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","uploadSettings","retryCount","uploading","onUploading","chunkUploading","onChunkUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","onChunkUploadComplete","statusText","onInitialEnd","removeEventListeners","wireSelectOnDragEvent","isBind","viewElem","onDragStart","enableRangeSelection","dragX","pageX","dragY","pageY","dragSelectElement","styles","append","onDragStop","onDrag","stopPropagation","diffX","diffY","setStyleAttribute","Math","abs","dragRect","allItems_1","itemRect","right","bottom","setPath","oldProp","requiresRefresh","ajaxSettingSetModel","localeSetModelOption","col","refreshing","CLS.RTL","toolbarModule","disableToolbarItems","enableToolbarItems","enableMenuItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","closeDialog","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","tickIcon","viewText","iconClass","firstChild","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","mergedItems","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getDragPath","getDropPath","nodeData","addChild","prevent","directories","targetDirectory","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","currFiles","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","itemname","checkDropPath","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","isMultiSelect","Grid","Resize","Sort","VirtualScroll","enablePersistence","gridPersistenceValue","localStorage","getItem","model","sortSettings","setItem","checkNameWidth","getColumns","isValidSortField","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","reactTemplateRender","emptyArgs","pane","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","HiddenName","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","intl","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","getDataRows","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","filterPathInSettings","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","isShiftPressed","isCtrlPressed","rowIndexes","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","relatedTarget","thElements","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","currentField","getColumnByUid","nextSibling","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tagName","check","getRecords","hasFilter","name_4","dRecords","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-filemanager.min.js","sources":["../../src/file-manager/common/utility.js","../../src/file-manager/common/operations.js","../../src/file-manager/pop-up/dialog.js","../../src/file-manager/models/ajax-settings.js","../../src/file-manager/models/toolbar-settings.js","../../src/file-manager/models/search-settings.js","../../src/file-manager/models/details-view-settings.js","../../src/file-manager/models/contextMenu-settings.js","../../src/file-manager/models/navigation-pane-settings.js","../../src/file-manager/models/upload-settings.js","../../src/file-manager/models/column.js","../../src/file-manager/base/classes.js","../../src/file-manager/base/constant.js","../../src/file-manager/layout/large-icons-view.js","../../src/file-manager/actions/breadcrumb-bar.js","../../src/file-manager/pop-up/context-menu.js","../../src/file-manager/models/default-locale.js","../../src/file-manager/base/file-manager.js","../../src/file-manager/actions/toolbar.js","../../src/file-manager/actions/virtualization.js","../../src/file-manager/layout/navigation-pane.js","../../src/file-manager/layout/details-view.js","../../src/global.js"],"sourcesContent":["import * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { read, paste, Search, filter, Download, Delete, isFileSystemData } from '../common/operations';\nimport { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, detach } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createDialog } from '../pop-up/dialog';\n/**\n * Utility function to compare two strings in a way similar to Windows Explorer.\n * Files and folders are sorted separately, with folders coming before files.\n *\n * @param {string} reference - The first string to compare. This could be a file or folder name.\n * @param {string} comparer - The second string to compare. This could be a file or folder name.\n * @returns {number} - A negative number if `reference` should come before `comparer`, a positive number if `comparer` should come before `reference`, and 0 if they are considered equal.\n */\nexport function sortComparer(reference, comparer) {\n // Check if reference and comparer are files or folders\n var referenceIsFile = /\\.\\S+/.test(reference);\n var comparerIsFile = /\\.\\S+/.test(comparer);\n // If one is a file and the other is a folder, the folder should come first\n if (referenceIsFile && !comparerIsFile) {\n return 1;\n }\n if (!referenceIsFile && comparerIsFile) {\n return -1;\n }\n var referenceParts = [];\n var comparerParts = [];\n (reference + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { referenceParts.push([$1 || Infinity, $2 || '']); return ''; });\n (comparer + '').replace(/(\\d+)|(\\D+)/g, function (_, $1, $2) { comparerParts.push([$1 || Infinity, $2 || '']); return ''; });\n // Compare each part of reference and comparer\n while (referenceParts.length && comparerParts.length) {\n var referencePart = referenceParts.shift();\n var comparerPart = comparerParts.shift();\n if (referencePart && comparerPart) {\n var comparisonResult = referencePart[0] - comparerPart[0] ||\n referencePart[1].localeCompare(comparerPart[1]);\n if (comparisonResult) {\n return comparisonResult;\n }\n }\n }\n return referenceParts.length - comparerParts.length;\n}\n/**\n * Utility file for common actions\n *\n * @param {HTMLLIElement} node - specifies the node.\n * @param {Object} data - specifies the data.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {void}\n * @private\n */\nexport function updatePath(node, data, instance) {\n var text = getValue('name', data);\n var id = node.getAttribute('data-id');\n var newText = isNOU(id) ? text : id;\n instance.setProperties({ path: getPath(node, newText, instance.hasId) }, true);\n instance.pathId = getPathId(node);\n instance.pathNames = getPathNames(node, text);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId) {\n var matched = getParents(element, text, false, hasId);\n var path = '/';\n var len = matched.length - (2);\n for (var i = len; i >= 0; i--) {\n path += matched[i] + '/';\n }\n return path;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} node - specifies the node element.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node) {\n var matched = getParents(node, node.getAttribute('data-uid'), true);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text) {\n var matched = getParents(element, text, false);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') :\n select('.' + CLS.LIST_TEXT, el).textContent);\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = '/';\n var i = 1;\n for (i; i < parent.pathId.length; i++) {\n var data = getValue(parent.pathId[parseInt(i.toString(), 10)], parent.feParent);\n newPath += getValue(key, data) + '/';\n }\n parent.setProperties({ path: newPath }, true);\n}\n/**\n * Functions for remove active element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function removeActive(parent) {\n if (parent.isCut) {\n removeBlur(parent);\n parent.selectedNodes = [];\n parent.actionRecords = [];\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n }\n}\n/**\n * Selects active element in File Manager\n *\n * @param {string} action - specifies the action.\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns active element.\n * @private\n */\nexport function activeElement(action, parent) {\n parent.isSearchCut = false;\n parent.actionRecords = [];\n parent.activeElements = [];\n parent.notify(events.cutCopyInit, {});\n if (parent.activeElements.length === 0) {\n return false;\n }\n removeBlur(parent);\n var blurEle = parent.activeElements;\n if (parent.activeModule !== 'navigationpane') {\n parent.targetPath = parent.path;\n }\n else {\n parent.targetPath = getParentPath(parent.path);\n }\n var i = 0;\n if (blurEle) {\n getModule(parent, blurEle[0]);\n if (action === 'cut') {\n while (i < blurEle.length) {\n addBlur(blurEle[i]);\n i++;\n }\n }\n }\n i = 0;\n parent.selectedNodes = [];\n parent.enablePaste = true;\n parent.notify(events.showPaste, {});\n while (i < parent.activeRecords.length) {\n parent.actionRecords.push(parent.activeRecords[i]);\n parent.selectedNodes.push(getValue('name', parent.activeRecords[i]));\n i++;\n }\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) &&\n parent.activeModule !== 'navigationpane') {\n parent.selectedNodes = [];\n parent.isSearchCut = true;\n var i_1 = 0;\n while (i_1 < parent.selectedItems.length) {\n parent.selectedNodes.push(parent.selectedItems[i_1]);\n i_1++;\n }\n }\n return true;\n}\n/**\n * Adds blur to the elements\n *\n * @param {Element} nodes - specifies the nodes.\n * @returns {void}\n * @private\n */\nexport function addBlur(nodes) {\n nodes.classList.add(CLS.BLUR);\n}\n/**\n * Removes blur from elements\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} hover - specifies the hover string.\n * @returns {void}\n * @private\n */\nexport function removeBlur(parent, hover) {\n var blurEle = (!hover) ? parent.element.querySelectorAll('.' + CLS.BLUR) :\n parent.element.querySelectorAll('.' + CLS.HOVER);\n var i = 0;\n while (i < blurEle.length) {\n blurEle[i].classList.remove((!hover) ? CLS.BLUR : CLS.HOVER);\n i++;\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getModule(parent, element) {\n if (element) {\n if (element.classList.contains(CLS.ROW)) {\n parent.activeModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICON)) {\n parent.activeModule = 'largeiconsview';\n }\n else {\n parent.activeModule = 'navigationpane';\n }\n }\n}\n/**\n * Get all child items\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent ID.\n * @returns {Object[]} An array of child items\n * @private\n */\nexport function getAllChildItems(parent, parentId) {\n var children = parent.fileSystemData.filter(function (item) {\n return String(item.parentId) === String(parentId);\n });\n var allChildren = children.slice();\n children.forEach(function (child) {\n var childId = child.id;\n allChildren = allChildren.concat(getAllChildItems(parent, childId));\n });\n return allChildren;\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (isFileSystemData(parent)) {\n if (value === '') {\n parent.itemData = parent.fileSystemData;\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n else {\n parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;\n var currData = getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n var parentId = getValue('id', currData);\n var filteredData = getAllChildItems(parent, parentId);\n var data = new DataManager(filteredData).\n executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));\n var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;\n parent.itemData = data;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchValue, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n return;\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {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 message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\nexport function hasReadAccess(data) {\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\nexport function hasEditAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\nexport function hasContentAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\nexport function hasUploadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\nexport function hasDownloadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n/**\n * Close dialog popup handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function closePopup(parent) {\n if (!isNullOrUndefined(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n}\n/**\n * Get target path from item data.\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} itemData - specifies the item elements.\n * @returns {string} returns the path.\n * @private\n */\nexport function getTargetPath(parent, itemData) {\n if (parent.hasId && !isNOU(getValue('filterId', itemData))) {\n return getValue('filterId', itemData).replace(/\\\\/g, '/').replace(/^[^/]+\\//, '/');\n }\n else {\n return getValue('filterPath', itemData).replace(/\\\\/g, '/');\n }\n}\n/**\n * Access control handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} itemData - specifies the item elements.\n * @param {string} action - specifies the action.\n * @param {boolean} isPathPermision - specifies the path permission.\n * @returns {string} returns the path.\n * @private\n */\nexport function getAccessDetails(parent, itemData, action, isPathPermision) {\n var accessMessage = '';\n for (var i = 0; i < itemData.length; i++) {\n var permission = getValue('permission', itemData[i]);\n if (permission == null) {\n permission = undefined;\n }\n if (isPathPermision) {\n if (permission && (!getValue('read', permission) || !getValue('writeContents', permission))) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', 'writeContents');\n }\n }\n }\n else {\n var copyOrMovePermission = action === 'copy' ? getValue('copy', permission) : getValue('write', permission);\n if (permission && (!getValue('read', permission) || !copyOrMovePermission)) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', action);\n }\n }\n }\n if (accessMessage !== '') {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: '401',\n message: accessMessage,\n fileExists: null\n },\n files: null\n };\n break;\n }\n }\n return accessMessage;\n}\n","import { Ajax, Fetch, createElement, select, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails, getTargetPath } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) {\n return !isNOU(item) && String(item.id) === String(id);\n });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = String(target.id) !== String(0) && !isNOU(target.parentId) ? target.filterPath + target.name + '\\\\' : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n 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 }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to update child item filter path.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string | number} parentId - specifies the parent id.\n * @param {string} oldName - specifies the previous name.\n * @param {string} newName - specifies the new name.\n * @returns {void}\n * @private\n */\nfunction updateChildrenFilterPath(parent, parentId, oldName, newName) {\n parent.fileSystemData.forEach(function (item) {\n if (String(item.parentId) === String(parentId)) {\n var oldPath = item.filterPath;\n var newPath = oldPath.replace(oldName + '\\\\', newName + '\\\\');\n item.filterPath = newPath;\n updateChildrenFilterPath(parent, item.id, oldName, newName);\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target_1 = args.targetData;\n var getTargetFiles = filterByParent(parent, target_1.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target_1.hasChild) {\n target_1.hasChild = !currItem.isFile;\n var targetItem = parent.fileSystemData\n .filter(function (item) { return String(item.id) === String(target_1.id); });\n if (targetItem.length > 0) {\n targetItem[0].hasChild = target_1.hasChild;\n }\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentId) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target_1;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target_1 = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target_1.id;\n fileData.filterPath = target_1.id === 0 ? '\\\\' : target_1.filterPath + target_1.name + '\\\\';\n if (!isNOU(target_1.filterId)) {\n fileData.filterId = target_1.filterId + target_1.id + '/';\n }\n if (!currItem.isFile) {\n updateMovedItemChildren(parent, fileData);\n }\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' || event === 'rename-end-parent'\n ? getValue('path', data) : parent.path;\n var pathArray = filePath.replace(/^\\/|\\/$/g, '').split('/');\n var idValue = event === 'rename-end-parent' || (event === 'path-changed' && getValue('data', data).length !== 0 && isNOU(parent.renamedItem))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n if (action === 'copy') {\n itemData = parent.pasteNodes.map(function (item) { return filterById(parent, item); });\n }\n else {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) || isMultipleFiles ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n if (!isNOU(result.files)) {\n setDateObject(result.files);\n for (var i = 0, len = result.files.length; i < len; i++) {\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n }\n if (location_1.indexOf('\\\\') === -1) {\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function to move operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} itemData - specifies the data.\n * @returns {void}\n * @private\n */\nfunction updateMovedItemChildren(parent, itemData) {\n var childItems = filterByParent(parent, itemData.id);\n childItems.forEach(function (childItem) {\n childItem.filterPath = itemData.filterPath + itemData.name + '\\\\';\n if (!isNOU(itemData.filterId)) {\n childItem.filterId = itemData.filterId + itemData.id + '/';\n }\n if (!childItem.isFile) {\n updateMovedItemChildren(parent, childItem);\n }\n });\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (!isNOU(result.error) && result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: action, result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, action);\n }\n }\n catch (error) {\n handleCatchError(parent, error, action);\n }\n}\n/* istanbul ignore next */\n/**\n * Function for create success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction createSuccess(parent, result, itemName) {\n try {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = isFileSystemData(parent) ? result.files[result.files.length - 1] : result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var createEventArgs = {\n folderName: itemName,\n path: parent.path,\n parentFolder: parent.itemData\n };\n parent.trigger('folderCreate', createEventArgs);\n var args = { action: 'create', result: result };\n parent.trigger('success', args);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.createEnd, parent.path);\n }\n else {\n if (result.error.code === '400') {\n if (parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#newname', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n else {\n var result_2 = {\n files: null,\n error: {\n code: '400',\n message: getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + itemName + '\"'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result_2);\n }\n var args = { action: 'create', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'create');\n }\n }\n }\n catch (error) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'create');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result) {\n try {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n var renameEventArgs = {\n newName: parent.renamedItem.name,\n itemData: [parent.renamedItem],\n path: parent.path\n };\n parent.trigger('rename', renameEventArgs);\n if (parent.activeModule === 'navigationpane') {\n var pathObject = getPathObject(parent);\n var pathLevel = parent.pathId[parent.pathId.length - 1].split('_').length - 2;\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n var renamePath = getTargetPath(parent, parent.renamedItem);\n read(parent, events.renameEndParent, renamePath);\n if (!isNOU(pathObject) && parent.pathNames.length > 1 && pathLevel <= parent.pathNames.length - 1) {\n parent.pathNames[pathLevel] = parent.renameText;\n if (!parent.hasId) {\n parent.setProperties({ path: \"/\" + parent.pathNames.slice(1).join('/') + \"/\" }, true);\n }\n }\n parent.itemData = parent.navigationpaneModule.previousSelected.length > 0\n ? parent.navigationpaneModule.treeObj.getTreeData(parent.navigationpaneModule.previousSelected[0]) : parent.itemData;\n read(parent, events.pathChanged, parent.path);\n parent.itemData[0] = parent.renamedItem;\n parent.renamedItem = null;\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n }\n catch (error) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n try {\n var moveorcopyEventArgs = {\n itemData: result.files,\n isCopy: operation === 'copy' ? true : false,\n path: path,\n targetData: parent.itemData[0],\n targetPath: parent.path\n };\n parent.trigger('move', moveorcopyEventArgs);\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n }\n catch (error) {\n handleCatchError(parent, error, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n try {\n var deleteEventArgs = {\n itemData: result.files,\n path: path\n };\n parent.trigger('delete', deleteEventArgs);\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n try {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(parent, event, path, searchString, showHiddenItems, caseSensitive) {\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var ajaxSettings = {\n url: downloadUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { data: data, cancel: false, useFormPost: true, ajaxSettings: ajaxSettings };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n if (downloadArgs.useFormPost) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n else {\n try {\n var contentDisposition_1;\n var fileName_1;\n var fetch_1 = new Fetch({\n url: getValue('url', downloadArgs.ajaxSettings),\n type: getValue('type', downloadArgs.ajaxSettings),\n contentType: getValue('contentType', downloadArgs.ajaxSettings),\n responseType: getValue('responseType', downloadArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', downloadArgs.ajaxSettings),\n onLoad: function (e) {\n contentDisposition_1 = e.headers.get('Content-Disposition');\n if (contentDisposition_1) {\n var filenameMatch = contentDisposition_1.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/);\n var extractedFilename = filenameMatch && filenameMatch[1];\n fileName_1 = extractedFilename ? extractedFilename.replace(/['\"]/g, '') : fileName_1;\n }\n else {\n fileName_1 = parent.itemData.length > 1 ? 'files.zip' : getValue('isFile', parent.itemData[0]) ? getValue('name', parent.itemData[0]) : getValue('name', parent.itemData[0]) + '.zip';\n }\n },\n onSuccess: function (e) {\n parent.trigger('success', downloadArgs);\n var blob = e;\n var blobUrl = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.href = blobUrl;\n link.download = fileName_1;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.downloadUrl\n }\n };\n createDialog(parent, 'Error', result);\n parent.trigger('failure', downloadArgs);\n }\n });\n fetch_1.send(JSON.stringify(downloadArgs.data));\n }\n catch (error) {\n handleCatchError(parent, error, 'download');\n }\n }\n }\n });\n}\n/**\n * Function for on catch handler in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {any} error - specifies the catch error.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction handleCatchError(parent, error, action) {\n var errorResult = {\n files: null,\n error: {\n message: error.message,\n fileExists: null\n }\n };\n onFailure(parent, errorResult, action);\n}\n/**\n * Function for trigger Fetch success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @returns {void}\n */\nexport function triggerFetchSuccess(parent, ajaxSettings) {\n parent.notify(events.afterRequest, { action: 'success' });\n if (ajaxSettings && typeof getValue('onSuccess', ajaxSettings) === 'function') {\n getValue('onSuccess', ajaxSettings)();\n }\n}\n/**\n * Function for trigger Fetch failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} ajaxSettings - specifies the ajax settings.\n * @param {ReadArgs} result - specifies the result.\n * @returns {void}\n */\nexport function triggerFetchFailure(parent, ajaxSettings, result) {\n parent.notify(events.afterRequest, { action: 'failure' });\n createDialog(parent, 'Error', result);\n if (typeof getValue('onFailure', ajaxSettings) === 'function') {\n getValue('onFailure', ajaxSettings)();\n }\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization, Fetch } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass, getTargetPath } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details) {\n var options = getOptions(parent, text, e, details);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n var index;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index = val.name.indexOf('.') + 1;\n return (index === 0 && (!val.isFile)) ? 'Folder' : ((index !== 0) ? val.name.substr(index).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] === undefined) {\n strArr = details.name.split(',').map(function (val) {\n index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = '';\n if (parent.activeModule === 'navigationpane') {\n newPath = getTargetPath(parent, parent.itemData[0]);\n }\n else {\n newPath = parent.path;\n }\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {BeforeImageLoadEventArgs} imageData - specifies the image eventargs.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageData) {\n var content = createElement('div', { className: 'e-image-wrap' });\n if (imageData.useImageAsUrl) {\n var image = createElement('img', { className: 'e-image', attrs: { src: imageData.imageUrl, alt: header } });\n content.appendChild(image);\n }\n else {\n var fetch_1 = new Fetch({\n url: getValue('url', imageData.ajaxSettings),\n type: getValue('type', imageData.ajaxSettings),\n contentType: getValue('contentType', imageData.ajaxSettings),\n responseType: getValue('responseType', imageData.ajaxSettings),\n beforeSend: getValue('beforeSend', imageData.ajaxSettings),\n onSuccess: function (e) {\n var blobUrl = URL.createObjectURL(e);\n var image = createElement('img', { className: 'e-image', attrs: { src: blobUrl, alt: header } });\n content.appendChild(image);\n triggerFetchSuccess(parent, imageData.ajaxSettings);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + getValue('url', imageData.ajaxSettings)\n }\n };\n triggerFetchFailure(parent, imageData.ajaxSettings, result);\n }\n });\n var data = getValue('data', imageData.ajaxSettings);\n fetch_1.send(data);\n }\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\n template: '<span class=\"e-fe-text\">${name}</span>',\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"chunkSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable, Fetch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete, triggerFetchFailure, triggerFetchSuccess } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout, getLocaleText } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.imageEventArgsMap = new Map();\n this.imageUrlCache = new Map();\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', imageAttributes: '_fm_imageAttr', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n 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);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\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.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n if (txt.indexOf(type) !== -1) {\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n }\n this.renderCheckbox(args);\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imageData = getImageUrl(this.parent, items[i]);\n if (imageData.useImageAsUrl) {\n setValue('_fm_imageUrl', imageData.imageUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n var uniqueKey = \"img_\" + name_1 + \"_\" + i;\n this.imageEventArgsMap.set(uniqueKey, imageData);\n setValue('_fm_imageUrl', '', items[i]);\n setValue('_fm_imageAttr', { alt: name_1, class: 'e-list-img image-blur', 'data-image-key': uniqueKey }, items[i]);\n }\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem && this.parent.activeModule === 'largeiconsview') {\n this.clearSelect();\n this.addSelection(this.parent.renamedItem);\n }\n }\n };\n LargeIconsView.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'largeiconsview') {\n this.doOpenAction(args.target);\n }\n };\n LargeIconsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'LargeIcons' && this.element) {\n this.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n LargeIconsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.startItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n var eveArgs = { ctrlKey: true, shiftKey: true };\n this.doSelection(lastItem, eveArgs);\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.clearSelection();\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n LargeIconsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onSearch = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n this.parent.searchedItems = args.files;\n this.onLayoutChange(args);\n }\n };\n LargeIconsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n };\n LargeIconsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.updateSelectedData();\n };\n LargeIconsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'LargeIcons' && !isNOU(this.listObj) &&\n this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered\n && this.parent.sortBy === 'filterPath') {\n this.parent.sortBy = 'name';\n this.parent.notify(events.sortByChange, {});\n }\n };\n LargeIconsView.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.search, this.onSearch);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.splitterResize, this.splitterResizeHandler);\n this.parent.off(events.resizeEnd, this.resizeHandler);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n this.parent.off(events.filterEnd, this.onPathChanged);\n };\n LargeIconsView.prototype.addEventListener = function () {\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.search, this.onSearch, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.splitterResize, this.splitterResizeHandler, this);\n this.parent.on(events.resizeEnd, this.resizeHandler, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n };\n LargeIconsView.prototype.onActionFailure = function () { this.isInteraction = true; this.isInteracted = true; };\n LargeIconsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var ele = closest(args.target, 'li');\n this.parent.itemData = [this.getItemObject(ele)];\n }\n };\n LargeIconsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.updateSelectedData();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n LargeIconsView.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath === '') ? [getPathObject(this.parent)] :\n [this.getItemObject(select('.e-active', this.element))];\n }\n };\n LargeIconsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeRecords = [];\n this.parent.activeElements = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.activeElements.push(activeEle[i]);\n this.parent.activeRecords.push(this.getItemObject(activeEle[i]));\n }\n }\n };\n LargeIconsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n LargeIconsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n LargeIconsView.prototype.onPropertyChanged = function (e) {\n var currentSelected;\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'selectedItems':\n this.isInteraction = false;\n this.isInteracted = false;\n currentSelected = isNOU(this.parent.selectedItems) ? [] : this.parent.selectedItems.slice(0);\n currentSelected = this.parent.allowMultiSelection ? currentSelected :\n currentSelected.slice(currentSelected.length - 1);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onClearAllInit();\n if (currentSelected.length) {\n this.selectItems(currentSelected);\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n this.isInteraction = true;\n this.isInteracted = true;\n break;\n case 'showThumbnail':\n refresh(this.parent);\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n case 'showItemCheckBoxes':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n if (_this.parent.isDevice) {\n _this.tapCount = eve.tapCount;\n _this.tapEvent = eve;\n setTimeout(function () {\n if (_this.tapCount > 0) {\n _this.doTapAction(_this.tapEvent);\n }\n _this.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n _this.dblClickHandler(eve);\n }\n else {\n _this.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n _this.multiSelect = _this.parent.allowMultiSelection ? true : false;\n if (_this.parent.allowMultiSelection) {\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n _this.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var ctrlKey = this.parent.isMac ? e.metaKey : e.ctrlKey;\n var isMacRightClick = this.parent.isMac && e.ctrlKey && e.shiftKey;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if ((e.which === 3 || isMacRightClick) && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.addActive(item);\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (ctrlKey && e.shiftKey && !isMacRightClick) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey && !isMacRightClick) {\n if (!(e && ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var text = getValue('name', details_1);\n if (!_this.parent.isFile) {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imageData = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imageData);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n LargeIconsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.FOCUS, this.element);\n };\n LargeIconsView.prototype.getActiveItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n };\n LargeIconsView.prototype.getFirstItem = function () {\n return this.itemList[0];\n };\n LargeIconsView.prototype.getLastItem = function () {\n return this.itemList[this.itemList.length - 1];\n };\n LargeIconsView.prototype.navigateItem = function (item) {\n this.setFocus(item);\n };\n LargeIconsView.prototype.navigateDown = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards, this.perRow);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.navigateRight = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.getNextItem = function (li, isTowards, perRow) {\n if (isNOU(li)) {\n return this.getFocusedItem() || this.getActiveItem() || this.getFirstItem();\n }\n var index = this.itemList.indexOf(li);\n var nextItem;\n do {\n if (isTowards) {\n index = perRow ? index + perRow : index + 1;\n }\n else {\n index = perRow ? index - perRow : index - 1;\n }\n nextItem = this.itemList[index];\n if (this.parent.enableVirtualization && isNOU(nextItem)) {\n var marginValue = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-bottom'), 10);\n var scrollHeight = this.itemList[0].getBoundingClientRect().height + marginValue;\n this.element.firstElementChild.scrollTo(this.element.firstElementChild.scrollTop, this.element.firstElementChild.scrollTop + scrollHeight);\n }\n if (isNOU(nextItem)) {\n return li;\n }\n } while (!isVisible(nextItem));\n return nextItem;\n };\n LargeIconsView.prototype.setFocus = function (nextItem) {\n if (!isNOU(nextItem)) {\n var fileSelectionArgs = this.triggerSelection('select', nextItem);\n if (fileSelectionArgs.cancel !== true) {\n this.startItem = nextItem;\n this.clearSelect();\n this.addActive(nextItem);\n this.addFocus(nextItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', nextItem);\n }\n }\n };\n LargeIconsView.prototype.spaceKey = function (fItem) {\n if (!isNOU(fItem) && !fItem.classList.contains(CLS.ACTIVE)) {\n var fileSelectionArgs = this.triggerSelection('select', fItem);\n if (fileSelectionArgs.cancel !== true) {\n this.addActive(fItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', fItem);\n }\n }\n };\n LargeIconsView.prototype.ctrlAKey = function (firstItem, lastItem) {\n if (this.parent.allowMultiSelection && !isNOU(firstItem)) {\n this.startItem = firstItem;\n var eveArgs = { ctrlKey: true, shiftKey: true };\n var liParent = this.element.querySelector('.' + CLS.LIST_PARENT);\n var liScrPos = liParent.scrollTop;\n var getCurFocusedItem = this.getFocusedItem();\n this.doSelection(lastItem, eveArgs);\n liParent.scrollTop = liScrPos;\n if (!isNOU(getCurFocusedItem)) {\n this.addFocus(getCurFocusedItem);\n }\n }\n };\n LargeIconsView.prototype.csEndKey = function (lastItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(lastItem);\n }\n else if (!isNOU(lastItem)) {\n if (e.action === 'ctrlEnd') {\n this.addFocus(lastItem);\n }\n else {\n this.doSelection(lastItem, e);\n }\n }\n };\n LargeIconsView.prototype.csHomeKey = function (firstItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(firstItem);\n }\n else if (!isNOU(firstItem)) {\n if (e.action === 'ctrlHome') {\n this.addFocus(firstItem);\n }\n else {\n this.doSelection(firstItem, e);\n }\n }\n };\n LargeIconsView.prototype.csDownKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, true);\n }\n else {\n var dItem = this.getNextItem(fItem, true, this.perRow);\n if (!isNOU(dItem)) {\n if (e.action === 'ctrlDown') {\n this.addFocus(dItem);\n }\n else {\n this.doSelection(dItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csLeftKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, false);\n }\n else {\n var lItem = this.getNextItem(fItem, false);\n if (!isNOU(lItem)) {\n if (e.action === 'ctrlLeft') {\n this.addFocus(lItem);\n }\n else {\n this.doSelection(lItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csRightKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, true);\n }\n else {\n var rItem = this.getNextItem(fItem, true);\n if (!isNOU(rItem)) {\n if (e.action === 'ctrlRight') {\n this.addFocus(rItem);\n }\n else {\n this.doSelection(rItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csUpKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, false);\n }\n else {\n var uItem = this.getNextItem(fItem, false, this.perRow);\n if (!isNOU(uItem)) {\n if (e.action === 'ctrlUp') {\n this.addFocus(uItem);\n }\n else {\n this.doSelection(uItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.addActive = function (nextItem) {\n if (!isNOU(nextItem)) {\n if (!nextItem.classList.contains(CLS.ACTIVE)) {\n this.parent.selectedItems.push(this.getDataName(nextItem));\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n addClass([nextItem], [CLS.ACTIVE]);\n nextItem.setAttribute('aria-selected', 'true');\n this.checkState(nextItem, true);\n }\n this.parent.visitedItem = nextItem;\n }\n };\n LargeIconsView.prototype.removeActive = function (preItem) {\n if (!isNOU(preItem)) {\n removeClass([preItem], [CLS.ACTIVE]);\n if (this.parent.allowMultiSelection) {\n preItem.setAttribute('aria-selected', 'false');\n }\n else {\n preItem.removeAttribute('aria-selected');\n }\n this.checkState(preItem, false);\n var index = this.parent.selectedItems.indexOf(this.getDataName(preItem));\n if (index > -1) {\n this.parent.selectedItems.splice(index, 1);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n this.parent.visitedItem = null;\n }\n };\n LargeIconsView.prototype.getDataName = function (item) {\n var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.splitterResizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.getItemCount = function () {\n var perRow = 1;\n if (this.itemList) {\n for (var i = 0, len = this.itemList.length - 1; i < len; i++) {\n if (this.itemList[i].getBoundingClientRect().top === this.itemList[i + 1].getBoundingClientRect().top) {\n perRow++;\n }\n else {\n break;\n }\n }\n }\n this.perRow = perRow;\n };\n LargeIconsView.prototype.triggerSelection = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null\n : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data\n : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n LargeIconsView.prototype.addSelection = function (data) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var newData = new DataManager(this.items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (newData.length > 0) {\n resultData = new DataManager(newData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n var index = this.items.indexOf(resultData[0]);\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[index], eveArgs);\n }\n };\n LargeIconsView.prototype.updateSelectedData = function () {\n var data = [];\n var items = selectAll('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n for (var i = 0; i < items.length; i++) {\n data[i] = this.getItemObject(items[i]);\n }\n this.parent.itemData = data;\n };\n LargeIconsView.prototype.onMethodCall = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n var action = getValue('action', args);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', args));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', args));\n break;\n case 'openFile':\n this.openFile(getValue('id', args));\n break;\n case 'renameFile':\n this.isInteraction = false;\n this.isInteracted = false;\n this.renameFile(getValue('id', args), getValue('newName', args));\n break;\n case 'createFolder':\n this.isInteraction = false;\n this.isInteracted = false;\n break;\n case 'clearSelection':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onClearAllInit();\n break;\n case 'selectAll':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onSelectAllInit();\n break;\n }\n };\n LargeIconsView.prototype.getItemsIndex = function (items) {\n var indexes = [];\n var isFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filterName = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !isFilter) {\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filterName, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n }\n else {\n for (var i = 0, len = this.items.length; i < len; i++) {\n var name_2 = getValue('filterPath', this.items[i]) + getValue('name', this.items[i]);\n if ((items.indexOf(name_2) !== -1) || (items.indexOf(getValue(filterName, this.items[i])) !== -1)) {\n indexes.push(i);\n }\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var indexes = this.getItemsIndex(ids);\n if (indexes.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < indexes.length; i++) {\n data[i] = this.items[indexes[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var index = this.getItemsIndex(ids);\n if (index.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < index.length; i++) {\n data[i] = this.items[index[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n this.doOpenAction(this.itemList[indexes[0]]);\n }\n };\n LargeIconsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n updateRenamingData(this.parent, this.items[indexes[0]]);\n if (isNOU(name)) {\n doRename(this.parent);\n }\n else {\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n rename(this.parent, this.parent.path, name);\n }\n }\n }\n };\n return LargeIconsView;\n}());\nexport { LargeIconsView };\n","import { EventHandler, closest, isNullOrUndefined, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, addClass, removeClass, remove, createElement } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { read } from '../common/operations';\nimport { getLocaleText, searchWordHandler } from '../common/utility';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * BreadCrumbBar module\n */\nvar BreadCrumbBar = /** @class */ (function () {\n /**\n * constructor for addressbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies parent element.\n * @private\n *\n */\n function BreadCrumbBar(parent) {\n this.addressPath = '';\n this.addressBarLink = '';\n this.searchTimer = null;\n this.searchWrapWidth = null;\n this.parent = parent;\n this.keyConfigs = {\n enter: 'enter'\n };\n this.render();\n }\n BreadCrumbBar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var value = e.newProp.searchSettings;\n switch (prop) {\n case 'searchSettings':\n if (!isNullOrUndefined(value.allowSearchOnTyping)) {\n this.searchEventBind(value.allowSearchOnTyping);\n }\n if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&\n !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&\n isNullOrUndefined(value.ignoreCase))) {\n searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);\n }\n break;\n }\n }\n };\n BreadCrumbBar.prototype.render = function () {\n this.addEventListener();\n };\n BreadCrumbBar.prototype.onPathChange = function () {\n var pathNames = this.parent.pathNames;\n var paths = this.parent.path.split('/');\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var addressbarLI = null;\n var pathNamesLen = pathNames.length;\n if (pathNames.length > 0) {\n var id = '';\n for (var i = 0; i < pathNamesLen; i++) {\n var addressATag = null;\n addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });\n for (var j = 0; j <= i; j++) {\n id = id + paths[j] + '/';\n }\n addressbarLI.setAttribute('data-utext', id);\n if (i !== 0) {\n var icon = createElement('span', { className: CLS.ICONS });\n addressbarLI.appendChild(icon);\n }\n if (pathNamesLen - i !== 1) {\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressbarLI.setAttribute('tabindex', '0');\n }\n else {\n addressATag = createElement('span', { className: CLS.LIST_TEXT });\n }\n id = '';\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n };\n ContextMenu.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: false,\n element: args.element,\n event: args.event,\n isFocused: args.isFocused,\n fileDetails: [this.menuItemData],\n items: args.items,\n parentItem: args.parentItem,\n menuType: this.menuType\n };\n this.parent.trigger('menuClose', eventArgs, function (menuCloseArgs) {\n if (menuCloseArgs.cancel) {\n args.cancel = menuCloseArgs.cancel;\n return;\n }\n });\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule === 'navigationpane') {\n this.parent.pathId.pop();\n var parentKey = [];\n var itemKeys = Object.keys(this.parent.feParent);\n for (var _i = 0, itemKeys_1 = itemKeys; _i < itemKeys_1.length; _i++) {\n var item = itemKeys_1[_i];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var itemData = getValue(item, this.parent.feParent);\n if (this.parent.pathNames.indexOf(itemData.name) !== -1) {\n parentKey.push(itemData._fm_id);\n }\n }\n this.parent.pathId.push(parentKey[parentKey.length - 1]);\n this.parent.navigationpaneModule.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n var selected = false;\n var uid;\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest('div');\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('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 === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n 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 'upload':\n uploadItem(_this.parent);\n break;\n case 'name':\n case 'size':\n case 'date':\n case 'ascending':\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.split(' ').join('').toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, detach, selectAll, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem, closePopup } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.existingFileCount = 0;\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not\n _this.isMac = false;\n _this.dragSelectedItems = [];\n _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 fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onChunkUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n if (this.uploadSettings.chunkSize === 0) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'size': args.fileData.size }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n FileManager.prototype.onChunkUploadComplete = function (files) {\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n var uploadFile = !isNullOrUndefined(files) ? getValue('file', files).name : '';\n if (uploadFile === this.retryArgs[i].file.name) {\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadSuccess = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadFailure = function (files) {\n if (this.uploadSettings.chunkSize > 0) {\n this.onChunkUploadComplete(files);\n }\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') !== -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireSelectOnDragEvent = function (isBind) {\n if (isNOU(this.view)) {\n return;\n }\n if (isBind) {\n this.viewElem = this.view === 'LargeIcons' ? this.largeiconsviewModule.element : this.element.querySelector('.e-gridcontent');\n }\n if (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 item.querySelector('.e-frame').classList.add('e-check');\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 }\n }\n if (requiresRefresh) {\n this.refresh();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n this.viewElem = null;\n this.dragSelectElement = null;\n this.dragSelectedItems = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Enables the specified menu items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.enableItems(items, true, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Specifies the method that must be invoked to traverse the path backwards in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.traverseBackward = function () {\n if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {\n this.pathId.pop();\n this.pathNames.pop();\n var newPath = this.pathNames.slice(1).join('/');\n newPath = newPath === '' ? '/' : '/' + newPath + '/';\n this.setProperties({ path: newPath }, true);\n read(this, events.pathChanged, this.path);\n var treeNodeId = this.pathId[this.pathId.length - 1];\n this.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the method which must be invoked to programmatically close the dialog popup in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.closeDialog = function () {\n closePopup(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property([])\n ], FileManager.prototype, \"fileSystemData\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableRangeSelection\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeFolderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"folderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDelete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"delete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeRename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"rename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeMove\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"move\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"search\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n var _this = this;\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan_1 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan_1 = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>',\n beforeItemRender: function (args) {\n var tickIcon = args.item.iconCss;\n var viewText = args.item.text === getLocaleText(_this.parent, 'View-LargeIcons');\n var iconClass = tickIcon ? ' e-menu-icon ' + tickIcon : '';\n args.element.innerHTML = '<span class=\"' + iconClass + '\"></span>' + (viewText ? largeIconSpan_1 : gridSpan_1) + args.item.text;\n var span = args.element.firstChild;\n if (span && span.className === '') {\n args.element.removeChild(span);\n }\n }\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = Object.assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n if (this.itemList.length !== 0 && this.largeIconInstance.element.querySelector('.' + CLS.EMPTY)) {\n this.largeIconInstance.element.removeChild(this.largeIconInstance.element.querySelector('.' + CLS.EMPTY));\n }\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add('e-virtual-top');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add('e-virtual-bottom');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n *\n * @param {number} dataSourceLength The length of the data source.\n * @returns {number} The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount =\n Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) /\n (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount *\n (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength || itemCount === 0) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n *\n * @param {boolean} destroy - Set `true` to unwire the scroll event.\n * @returns {void}\n */\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n // Wire the scroll event\n EventHandler.add(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll, this);\n }\n else {\n // Unwire the scroll event\n EventHandler.remove(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll);\n }\n };\n /**\n * Handles the scroll event for the list element.\n * This method updates the top and bottom elements and the displayed items based on the scroll position.\n *\n * @returns {void}\n * @private\n */\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n // Set the starting height to 0\n var startingHeight = 0;\n // Get the current scroll position\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n // Calculate the height of the top element\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n // Calculate the height of the bottom element\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n // If the scroll position is less than or equal to the total height, set the top and bottom element heights.\n // Otherwise, set the top element height to the total height and the bottom element height to 0.\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n // If the top element height has changed, update the top and bottom element heights and re-render the items.\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n // Check whether the scroll direction is upward or downward\n if (scroll > this.scrollPosition) {\n // Scrolling is upward\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n this.onNormalScroll(listDiff, true);\n }\n else {\n // Scrolling is downward\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n this.onNormalScroll(listDiff, false);\n }\n }\n // Update the list difference and scroll position variables\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n this.scrollPosition = scroll;\n // Update the list of items and the items property of the largeIconInstance\n this.largeIconInstance.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.largeIconInstance.element));\n this.itemCount = this.itemCount !== this.largeIconInstance.itemList.length ?\n this.largeIconInstance.itemList.length : this.itemCount;\n this.largeIconInstance.items = this.largeIconInstance.allItems.slice(this.renderedCount -\n this.itemCount, this.renderedCount);\n };\n /**\n * Calculates the current scroll position of the list element.\n *\n * @param {number} startingHeight The starting height from which to calculate the scroll position.\n * @returns {number} The current scroll position.\n * @private\n */\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n // If the scroll position is less than or equal to the starting height, return 0.\n // Otherwise, return the scroll position minus the starting height.\n return ((this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight) <= 0) ? 0 :\n (this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight);\n };\n /**\n * This method updates the displayed items and the selection based on the scroll direction.\n *\n * @param {number} listDiff The number of rows to update.\n * @param {boolean} isScrollingDown If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\n */\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n // Update the displayed items\n for (var i = 0; i < listDiff; i++) {\n this.updateUI(isScrollingDown);\n }\n };\n /**\n * Updates the items in the large icons view.\n *\n * @param {boolean} isScrollingDown - If set to true, the scroll direction is downward.\n * @returns {void}\n * @private\n */\n Virtualization.prototype.updateUI = function (isScrollingDown) {\n var _this = this;\n if (isScrollingDown) {\n // Get the next batch of items to be displayed\n this.items = this.largeIconInstance.allItems.slice(this.renderedCount, this.renderedCount + this.rowItemCount);\n // If there are items to be displayed, create list elements for them and append them to the list\n if (this.items.length > 0) {\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n this.itemList.forEach(function (liEle) {\n _this.largeIconInstance.element.firstElementChild.insertBefore(liEle, _this.bottomElement);\n });\n // Update the rendered count variable\n this.renderedCount = (this.largeIconInstance.allItems.length >= this.renderedCount + this.rowItemCount) ?\n this.renderedCount + this.rowItemCount : this.renderedCount + this.lastRowCount;\n // Remove the first batch of items from the list\n for (var i = 0; i < this.rowItemCount; i++) {\n detach(this.topElement.nextElementSibling);\n }\n }\n }\n else {\n // Scrolling up\n var lastItemIndex = void 0;\n var isAllRendered = void 0;\n if (this.renderedCount === this.largeIconInstance.allItems.length) {\n // Set lastItemIndex to the last item in the last row\n lastItemIndex = this.renderedCount - (this.itemCount - this.rowItemCount + this.lastRowCount);\n // Set renderedCount to the total number of items that have been rendered, except for the items in the last row\n this.renderedCount = ((this.renderedCount - this.lastRowCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.lastRowCount);\n // Set isAllRendered to true to indicate that all items have been rendered\n isAllRendered = true;\n }\n else {\n // Set lastItemIndex to the last item in the current row\n lastItemIndex = this.renderedCount - this.itemCount;\n // Set renderedCount to the total number of items that have been rendered, except for the items in the current row\n this.renderedCount = ((this.renderedCount - this.rowItemCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.rowItemCount);\n }\n // Set startItemIndex to the first item in the current or previous row\n var startItemIndex = (lastItemIndex - this.rowItemCount > 0) ? lastItemIndex - this.rowItemCount : 0;\n // Set the items array to the items in the current or previous row\n this.items = this.largeIconInstance.allItems.slice(startItemIndex, lastItemIndex);\n if (this.items.length > 0) {\n // Create a list of elements from the items array\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n // Set the itemList array to the list items in the list elements\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Add the items to the beginning of the list\n for (var len = this.itemList.length; len > 0; len--) {\n this.largeIconInstance.element.firstElementChild.insertBefore(this.itemList[len - 1], this.topElement.nextElementSibling);\n }\n // Remove the last row of items from the list\n for (var i = 0; i < ((isAllRendered) ? this.lastRowCount : this.rowItemCount); i++) {\n detach(this.bottomElement.previousElementSibling);\n }\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n /**\n * Destroys the component.\n *\n * @returns {void}\n */\n Virtualization.prototype.destroy = function () {\n // If the file manager has already been destroyed, return immediately\n if (this.filemanagerInstance.isDestroyed) {\n return;\n }\n // If the large icon element has a child element, unwire the scroll event\n if (!isNullOrUndefined(this.largeIconInstance.element.firstElementChild)) {\n this.wireScrollEvent(true);\n }\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete, isFileSystemData } from '../common/operations';\nimport { createDialog } from '../pop-up/dialog';\nimport { updatePath, getPath, getDirectories } from '../common/utility';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getDirectoryPath, getModule, getPathId } from '../common/index';\nimport { copyFiles, cutFiles, removeActive, pasteHandler, getParentPath, readDropPath } from '../common/index';\nimport { hasEditAccess, createDeniedDialog, hasDownloadAccess, getAccessClass } from '../common/index';\n/**\n * NavigationPane module\n */\nvar NavigationPane = /** @class */ (function () {\n /**\n * Constructor for the TreeView module\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n /* istanbul ignore next */\n function NavigationPane(parent) {\n this.removeNodes = [];\n this.moveNames = [];\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = [];\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n var directories = getDirectories(files);\n var targetDirectory = this.getTreeData(target);\n if (directories.length > 0 && targetDirectory.length > 0 &&\n (directories[0].filterPath == null ||\n isNOU(targetDirectory[0])\n && targetDirectory[0].filterPath == null\n || directories[0].filterPath !==\n targetDirectory[0].filterPath)) {\n var length_1 = 0;\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line camelcase\n folders[parseInt(length_1.toString(), 10)]._fm_icon = 'e-fe-folder';\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick &&\n !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked || this.isPathDragged) {\n this.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);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.selectedItems = [];\n this.parent.itemData = nodeData;\n var previousPath = this.parent.path;\n if (!this.isRightClick && this.isSameNodeClicked) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onPathDrag = function (args) {\n this.isPathDragged = true;\n this.selectResultNode(args[0]);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpand = function (args) {\n if (!args.isInteracted && !this.isDrag) {\n return;\n }\n if (args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.isNodeExpandCalled = true;\n var text = getValue('text', args.nodeData);\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? text : id;\n var path = getPath(args.node, newText, isId);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.pathId.push(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.setProperties({ selectedNodes: [args.node.getAttribute('data-uid')] });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], true);\n }\n this.expandNodeTarget = '';\n }\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.setProperties({ selectedNodes: [sleId] });\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.addChild(args.files, id, false);\n this.treeObj.setProperties({ selectedNodes: [this.parent.pathId[this.parent.pathId.length - 1]] });\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = this.previousSelected.length > 0 && this.treeObj.getTreeData(this.previousSelected[0]).length !== 0\n ? this.previousSelected[0] : getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n this.updateItemData();\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEnd = function (args) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.updateTree(args);\n }\n else {\n var data = this.treeObj.getTreeData();\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(data).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(data).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.currentItemText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n this.renameParent = getValue(this.treeObj.fields.parentID, resultData[0]);\n this.parent.expandedId = this.renameParent;\n this.parent.itemData = this.getTreeData(this.renameParent);\n read(this.parent, events.renameEndParent, this.parent.filterPath.replace(/\\\\/g, '/'));\n }\n }\n };\n NavigationPane.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.addDragDrop();\n break;\n case 'navigationPaneSettings':\n read(this.parent, events.finalizeEnd, this.parent.path);\n if (e.oldProp.navigationPaneSettings.sortOrder !== e.newProp.navigationPaneSettings.sortOrder) {\n this.treeObj.sortOrder = e.newProp.navigationPaneSettings.sortOrder;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDownLoadInit = function () {\n this.doDownload();\n };\n NavigationPane.prototype.onSelectionChanged = function (e) {\n this.treeObj.setProperties({ selectedNodes: [e.selectedNode] });\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n if (isFileSystemData(this.parent)) {\n this.moveNames = [];\n var obj = this.parent.dragData;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n }\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n if (!obj || !Array.isArray(obj)) {\n return;\n }\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n NavigationPane.prototype.getTreeData = function (args) {\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var node = select('[data-uid=\"' + this.parent.pathId[this.parent.pathId.length - 1] + '\"]', this.treeObj.element);\n updatePath(node, this.parent.itemData[0], this.parent);\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\nimport { removeBlur, openAction, getImageUrl, fileType, getSortedData, getLocaleText, updateLayout } from '../common/utility';\nimport { createEmptyElement } from '../common/utility';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { cutFiles, addBlur, openSearchFolder, copyFiles, removeActive, pasteHandler, getPathObject, getName } from '../common/index';\nimport { hasReadAccess, hasEditAccess, hasDownloadAccess, doRename, getAccessClass, createDeniedDialog, rename } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule, getFullPath } from '../common/index';\nimport { getDirectoryPath, updateRenamingData, getItemName, doDeleteFiles, doDownloadFiles } from '../common/index';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * DetailsView module\n */\nvar DetailsView = /** @class */ (function () {\n /**\n * Constructor for the GridView module\n *\n * @param {FileManager} parent - specifies the parent.\n * @hidden\n */\n function DetailsView(parent) {\n this.isInteracted = true;\n this.interaction = true;\n this.isPasteOperation = false;\n this.isColumnRefresh = false;\n this.dragObj = null;\n this.startIndex = null;\n this.firstItemIndex = null;\n this.isSelectionUpdate = false;\n this.currentSelectedItem = [];\n this.count = 0;\n this.isRendered = true;\n this.isLoaded = false;\n this.isNameWidth = false;\n this.isMultiSelect = false;\n this.pasteOperation = false;\n this.uploadOperation = false;\n Grid.Inject(Resize, ContextMenu, Sort, VirtualScroll);\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.GRID_ID, this.parent.element);\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n tab: 'tab',\n moveDown: 'downarrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n ctrlUp: 'ctrl+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n end: 'end',\n home: 'home',\n moveUp: 'uparrow',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n back: 'backspace'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n var _this = this;\n if (this.parent.enablePersistence) {\n var gridPersistenceValue = window.localStorage.getItem('grid' + this.parent.element.id + '_grid');\n if (!isNOU(gridPersistenceValue)) {\n var model = JSON.parse(gridPersistenceValue);\n if (!isNOU(model) && Object.keys(model).length > 0 && 'sortSettings' in model) {\n delete model.sortSettings;\n window.localStorage.setItem('grid' + this.parent.element.id + '_grid', JSON.stringify(model));\n }\n }\n }\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n var isValidSortField = !isNullOrUndefined(columns) &&\n columns.findIndex(function (col) { return col.field === _this.parent.sortBy; }) !== -1;\n if (this.parent.isMobile || !isValidSortField) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick'\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n load: function () {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n if (this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization && this.parent.enablePersistence) {\n this.isLoaded = true;\n }\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {number} - The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n var enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return \"<div class=\\\"e-fe-text\\\">\" + name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div><span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n var _loop_1 = function (i, len) {\n columns[i].headerText = getLocaleText(this_1.parent, columns[i].headerText);\n if (columns[i].field === 'name' && !isNOU(columns[i].template) && !(typeof columns[i].template === 'function')) {\n var template_1 = columns[i].template;\n columns[i].template = initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return template_1.replace(/\\${name}/g, name);\n });\n }\n };\n var this_1 = this;\n for (var i = 0, len = columns.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n if (this.parent.enableRangeSelection) {\n var HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };\n columns.push(HiddenName);\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var text = getValue('name', args.data);\n var textEle = args.row.querySelector('[title= \"' + text + '\"]');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n if (name_1.indexOf(type) !== -1) {\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n var _this = this;\n showSpinner(this.parent.element);\n var nameColumn = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === _this.parent.sortBy; });\n if (nameColumn && !('sortComparer' in nameColumn)) {\n var items = getSortedData(this.parent, (this.parent.enableVirtualization)\n ? args.result\n : this.gridObj.dataSource);\n args.result = items;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) || 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 };\n DetailsView.prototype.selectRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && !this.parent.hasId && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n DetailsView.prototype.addSelection = function (data) {\n var items = this.gridObj.getCurrentViewRecords();\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showItemCheckBoxes':\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var pathField = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === 'filterPath'; });\n if ((this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) ||\n (!isNullOrUndefined(pathField) && !isNullOrUndefined(pathField.hideAtMedia) && pathField.hideAtMedia !== '')) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.wireClickEvent(true);\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imageData = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imageData);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n if (this.gridObj == null) {\n return;\n }\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n var filterPathInSettings = this.parent.detailsViewSettings.columns.some(function (col) { return col.field === 'filterPath'; });\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath') && !filterPathInSettings) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].style.width = '120px';\n gridContentColGroup.children[i].style.width = '120px';\n }\n else {\n gridHeaderColGroup.children[i].style.width = '180px';\n gridContentColGroup.children[i].style.width = '180px';\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].style.width = 'auto';\n gridContentColGroup.children[i].style.width = 'auto';\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && isNullOrUndefined(this.dragObj)) {\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n var info = null;\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n if (!this.isMultiSelect) {\n this.isMultiSelect = true;\n if ((args.isShiftPressed || args.isCtrlPressed) && !this.parent.allowMultiSelection && (args.target && args.target.parentElement && !args.target.parentElement.classList.contains('e-checkbox-wrapper'))) {\n args.cancel = true;\n var rowIndex = (args && args.rowIndexes)\n ? args.rowIndexes[args.rowIndexes.length - 1]\n : args.rowIndex;\n this.gridObj.selectRow(rowIndex);\n }\n this.isMultiSelect = false;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n var item = this.gridObj.getRowByIndex(args.rowIndex);\n if (!isNOU(item)) {\n item.removeAttribute('tabindex');\n }\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n if (!isNOU(lastItem)) {\n lastItem.querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n _this.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (_this.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', _this.parent.allowMultiSelection, _this.gridObj.selectionModule);\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = _this.gridObj.getRows().indexOf(row);\n _this.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.onBlur = function (e) {\n if ((e.relatedTarget !== null && closest(e.relatedTarget, '.e-grid') !== e.relatedTarget)) {\n return;\n }\n if (!isNOU(this.gridObj.element)) {\n var thElements = this.gridObj.element.querySelectorAll('th');\n for (var i = 0; i < thElements.length; i++) {\n if (thElements[i].classList.contains('e-focus')) {\n this.addFocus(null);\n }\n }\n }\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('aria-rowindex'), 10) - 1 : null;\n };\n /* istanbul ignore next */\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1 && this.gridObj.allowSorting === true) {\n if (!e.target.classList.contains('e-fe-grid-icon')) {\n var direction = !e.target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n var currentField = this.gridObj.getColumnByUid(e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid')).field;\n this.gridObj.sortColumn(currentField, direction);\n if (!isNOU(this.getFocusedItem().nextSibling)) {\n this.getFocusedItem().nextSibling.setAttribute('tabindex', '0');\n }\n }\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else {\n this.addHeaderFocus(e);\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function (e) {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus;\n if (!isNOU(e.target) && e.target.classList.contains('e-defaultcursor')) {\n this.addFocus(0);\n nameFocus = e.target.nextElementSibling;\n }\n else if (!isNOU(this.gridObj.element.querySelector('.e-focus')) && (this.gridObj.element.querySelector('.e-focus').tagName === 'TH')) {\n nameFocus = this.gridObj.element.querySelector('.e-focus').nextElementSibling;\n this.addFocus(0);\n }\n else {\n nameFocus = select('th.e-fe-grid-icon', this.element);\n }\n if (!isNOU(nameFocus)) {\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n DetailsView.prototype.getRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["sortComparer","reference","comparer","referenceIsFile","test","comparerIsFile","referenceParts","comparerParts","replace","_","$1","$2","push","Infinity","length","referencePart","shift","comparerPart","comparisonResult","localeCompare","updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","ids","names","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","parseInt","toString","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","getAllChildItems","parentId","children","fileSystemData","filter","item","String","allChildren","slice","forEach","child","childId","concat","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","isFileSystemData","itemData","read","events.layoutChange","events.search","searchSettings","filterType","currData","filteredData","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","Search","showHiddenItems","getPathObject","caseSensitive","hiddenItems","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","imgUrl","eventArgs_1","fileDetails","imageUrl","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","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","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","navigationpaneModule","treeObj","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","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","responseData","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","isFileExists","some","findIndexById","findIndex","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","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","getTreeData","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","contentDisposition_1","fileName_1","Fetch","onLoad","e","headers","get","filenameMatch","extractedFilename","blob","blobUrl","URL","createObjectURL","link","href","body","status","triggerFetchSuccess","triggerFetchFailure","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","replaceItems","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","onDeleteSubmit","Internationalization","formatDate","format","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","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","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","imageEventArgsMap","Map","imageUrlCache","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","imageAttributes","htmlAttributes","itemCreated","onItemCreated","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","loadImages","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","_this","imgElement","imageKey","has","imageDetails","set","response","x","z","ondragstart","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","uniqueKey","data-image-key","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","clickObj","Touch","tap","eve","isDevice","tapEvent","doTapAction","originalEvent","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","metaKey","isMacRightClick","cList","addActive","CLS.CHECK","triggerSelection","startIndex","endIndex","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","traverseBackward","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","getPropertyValue","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","isFocused","parentItem","menuType","menuCloseArgs","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","navUid","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","itemsToRemove","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","enable","isUniqueId","validItem","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","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","uploadSettings","retryCount","uploading","onUploading","chunkUploading","onChunkUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","onChunkUploadComplete","statusText","onInitialEnd","removeEventListeners","wireSelectOnDragEvent","isBind","viewElem","onDragStart","enableRangeSelection","dragX","pageX","dragY","pageY","dragSelectElement","styles","append","onDragStop","onDrag","stopPropagation","diffX","diffY","setStyleAttribute","Math","abs","dragRect","allItems_1","itemRect","right","bottom","setPath","oldProp","requiresRefresh","ajaxSettingSetModel","localeSetModelOption","col","refreshing","CLS.RTL","toolbarModule","disableToolbarItems","enableToolbarItems","enableMenuItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","closeDialog","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","tickIcon","viewText","iconClass","firstChild","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","mergedItems","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getDragPath","getDropPath","nodeData","addChild","prevent","directories","targetDirectory","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","currFiles","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","itemname","checkDropPath","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","isMultiSelect","Grid","Resize","Sort","VirtualScroll","enablePersistence","gridPersistenceValue","localStorage","getItem","model","sortSettings","setItem","checkNameWidth","getColumns","isValidSortField","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","reactTemplateRender","emptyArgs","pane","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","HiddenName","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","intl","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","getDataRows","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","filterPathInSettings","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","isShiftPressed","isCtrlPressed","rowIndexes","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","relatedTarget","thElements","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","currentField","getColumnByUid","nextSibling","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tagName","check","getRecords","hasFilter","name_4","dRecords","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}