@syncfusion/ej2-filemanager 27.1.51 → 27.1.52

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 * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (isFileSystemData(parent)) {\n if (value === '') {\n parent.itemData = parent.fileSystemData;\n read(parent, events.layoutChange, parent.path);\n }\n else {\n parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;\n var filteredData = parent.fileSystemData.filter(function (obj) { return obj.parentId !== null; });\n var data = new DataManager(filteredData).\n executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));\n var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;\n parent.itemData = data;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchValue, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n return;\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {string} - returns the image url.\n * @private\n */\nexport function getImageUrl(parent, item) {\n var imgUrl = isFileSystemData(parent) ? getValue('imageUrl', item) : '';\n if (isFileSystemData(parent)) {\n var eventArgs_1 = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs_1);\n return eventArgs_1.imageUrl;\n }\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var fileName = encodeURIComponent(getValue('name', item));\n var fPath = getValue('filterPath', item);\n if (parent.hasId) {\n var imgId = getValue('id', item);\n imgUrl = baseUrl + pathUrl + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + pathUrl + encodeURIComponent(fPath.replace(/\\\\/g, '/')) + fileName;\n }\n else {\n imgUrl = baseUrl + pathUrl + parent.path + fileName;\n }\n imgUrl = imgUrl + '&time=' + (new Date().getTime()).toString();\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs.imageUrl;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\nexport function getName(parent, data) {\n var name = getValue('name', data);\n var fPath = getValue('filterPath', data);\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) && !isNOU(fPath)) {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(parent.path, '') + name;\n }\n return name;\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object[]} items - specifies the item elements.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None' && !isNullOrUndefined(parent.sortOrder)) {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n var lists = new DataManager(items).executeLocal(query);\n return getValue('records', lists);\n}\n/**\n * Gets the data object\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} key - specifies the key.\n * @param {string} value - specifies the value.\n * @returns {Object} - returns the sorted data.\n * @private\n */\nexport function getObject(parent, key, value) {\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var query = new Query().where(key, 'equal', value);\n var lists = new DataManager(currFiles).executeLocal(query);\n return lists[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 = getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\nexport function getDirectories(files) {\n return new DataManager(files).executeLocal(new Query().where(events.isFile, 'equal', false, false));\n}\n/**\n * set the Node ID\n *\n * @param {ReadArgs} result - specifies the result.\n * @param {string} rootId - specifies the rootId.\n * @returns {void}\n * @private\n */\nexport function setNodeId(result, rootId) {\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @param {Internationalization} localeString - The internationalization object for formatting dates.\n * @param {string} dateFormat - The date format string.\n * @returns {void}\n * @private\n */\nexport function setDateObject(args, localeString, dateFormat) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n if (isNOU(dateFormat)) {\n dateFormat = 'MM/dd/yyyy';\n }\n setValue('_fm_created', localeString.formatDate(createdDate, { format: dateFormat }), args[i]);\n setValue('_fm_modified', localeString.formatDate(modifiedDate, { format: dateFormat }), args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @param {IFileManager} [parent] - optional parameter representing the parent IFileManager.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n var data = getObject(parent, key, folders[parseInt(i.toString(), 10)]);\n if (!isNullOrUndefined(data)) {\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n parent.pathId.push(id);\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n }\n else {\n parent.originalPath = newPath;\n }\n read(parent, eventName, parent.path);\n break;\n }\n}\n/**\n * Opens the searched folder\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data\n * @returns {void}\n * @private\n */\nexport function openSearchFolder(parent, data) {\n parent.originalPath = getFullPath(parent, data, parent.path);\n var root = getValue(parent.pathId[0], parent.feParent);\n var isRoot = getValue('_fm_id', parent.itemData[0]) === 'fe_tree';\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n var searchData = getObject(parent, key, isFileSystemData(parent) ? getValue('id', data) : getValue('name', data));\n if (isNullOrUndefined(searchData)) {\n if (!isRoot) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n }\n else {\n setNextPath(parent, parent.path);\n return;\n }\n }\n else {\n var id = getValue('_fm_id', searchData);\n parent.setProperties({ path: parent.originalPath }, true);\n parent.pathId.push(id);\n parent.itemData = [searchData];\n parent.pathNames.push(getValue('name', searchData));\n }\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n if (parent.activeModule === 'navigationpane' && !parent.selectedNodes[0].includes('/')) {\n parent.targetPath = getValue('filterPath', parent.actionRecords[0]).replace(/\\\\/g, '/');\n }\n var subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);\n if (!subFolder) {\n if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {\n parent.notify(events.pasteInit, {});\n paste(parent, parent.targetPath, parent.selectedNodes, path, parent.fileAction, [], parent.actionRecords);\n }\n else {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n removeBlur(parent);\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n }\n }\n }\n}\n/**\n * Validates the sub folders\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {'{ [key: string]: Object; }[]'} data - specifies the data.\n * @param {string} dropPath - specifies the drop path.\n * @param {string} dragPath - specifies the drag path.\n * @returns {boolean} - returns the validated sub folder.\n * @private\n */\nexport function validateSubFolder(parent, data, dropPath, dragPath) {\n var subFolder = false;\n for (var i = 0; i < data.length; i++) {\n if (!getValue('isFile', data[i])) {\n var tempTarget = getFullPath(parent, data[i], dragPath);\n if (dropPath.indexOf(tempTarget) === 0) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Sub-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n else {\n var name_1 = parent.dragData[i] ? parent.dragData[i].name : null;\n var srcData = isFileSystemData(parent) ? name_1 : parent.dragNodes[i];\n var len = 0;\n if (srcData) {\n len = srcData.lastIndexOf('/');\n }\n var path = '';\n if (len > 0) {\n path = dragPath + srcData.substring(0, len + 1);\n }\n if (path === dropPath) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n }\n return subFolder;\n}\n/**\n * Validates the drop handler\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function dropHandler(parent) {\n parent.isDragDrop = true;\n if (parent.dragData.length !== 0) {\n parent.dragPath = parent.dragPath.replace(/\\\\/g, '/');\n parent.dropPath = parent.dropPath.replace(/\\\\/g, '/');\n var subFolder = validateSubFolder(parent, parent.dragData, parent.dropPath, parent.dragPath);\n if (!subFolder && (parent.dragPath !== parent.dropPath)) {\n parent.itemData = [parent.dropData];\n paste(parent, parent.dragPath, parent.dragNodes, parent.dropPath, 'move', [], parent.dragData);\n parent.notify(events.pasteInit, {});\n }\n }\n}\n/**\n * Gets the parent path\n *\n * @param {string} oldPath - specifies the old path.\n * @returns {string} - returns the parent path.\n * @private\n */\nexport function getParentPath(oldPath) {\n var path = oldPath.split('/');\n var newPath = path[0] + '/';\n for (var i = 1; i < path.length - 2; i++) {\n newPath += path[i] + '/';\n }\n return newPath;\n}\n/**\n * Gets the directory path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {ReadArgs} args - returns the read arguements.\n * @returns {string} - returns the directory path\n * @private\n */\nexport function getDirectoryPath(parent, args) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', args.cwd) + '/';\n var fPath = getValue(parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return isFileSystemData(parent) ? filePath : parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n 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 parent.trigger('success', { action: operation, result: result });\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} screenY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the entire screen.\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, screenY, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select('.' + nodeClass, scrollParent);\n if ((screenY >= (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.screenY, 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.screenY, 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.screenY, args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\nexport function createDeniedDialog(parent, data, action) {\n var message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\nexport function hasReadAccess(data) {\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\nexport function hasEditAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\nexport function hasContentAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\nexport function hasUploadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\nexport function hasDownloadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n/**\n * Close dialog popup handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function closePopup(parent) {\n if (!isNullOrUndefined(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n}\n/**\n * Access control handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} itemData - specifies the item elements.\n * @param {string} action - specifies the action.\n * @param {boolean} isPathPermision - specifies the path permission.\n * @returns {string} returns the path.\n * @private\n */\nexport function getAccessDetails(parent, itemData, action, isPathPermision) {\n var accessMessage = '';\n for (var i = 0; i < itemData.length; i++) {\n var permission = getValue('permission', itemData[i]);\n if (permission == null) {\n permission = undefined;\n }\n if (isPathPermision) {\n if (permission && (!getValue('read', permission) || !getValue('writeContents', permission))) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', 'writeContents');\n }\n }\n }\n else {\n var copyOrMovePermission = action === 'copy' ? getValue('copy', permission) : getValue('write', permission);\n if (permission && (!getValue('read', permission) || !copyOrMovePermission)) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', action);\n }\n }\n }\n if (accessMessage !== '') {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: '401',\n message: accessMessage,\n fileExists: null\n },\n files: null\n };\n break;\n }\n }\n return accessMessage;\n}\n","import { Ajax, Fetch, createElement, select, extend, Internationalization } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Function for getDateFormat in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\n if (!columns) {\n return null;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === '_fm_modified') {\n if (!isNOU(columns[i].format)) {\n dateFormat = columns[i].format.toString();\n }\n break;\n }\n }\n return dateFormat;\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) { return String(item.id) === String(id); });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = target.id !== 0 ? target.filterPath + target.name : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n return newItem;\n}\n/**\n * Function to create an error response.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} message - specifies the error message.\n * @param {string} code - specifies the error code.\n * @param {Object[]} fileName - specifies the file name.\n * @returns {void}\n * @private\n */\nfunction createErrorObject(parent, message, code, fileName) {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: code,\n message: message,\n fileExists: fileName != null ? fileName : null\n },\n files: null\n };\n}\n/**\n * Function to trigger folder creation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerFolderCreation(parent, data, eventArgs) {\n var createEventArgs = {\n folderName: getValue('name', data),\n cancel: false,\n path: getValue('path', data),\n parentFolder: getValue('data', data)\n };\n parent.trigger('beforeFolderCreate', createEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.folderName)) {\n var data_1 = args.parentFolder[0];\n var newObject = createNewItem(data_1, data_1, args.folderName, false);\n parent.fileSystemData.push(newObject);\n }\n else {\n var message = 'A file or folder with the name ' + args.folderName + ' already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger delete operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerDeleteOperation(parent, data, eventArgs) {\n var deleteEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeDelete', deleteEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n args.itemData.forEach(function (itemData) {\n var index = findIndexById(parent, itemData.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n if (!itemData.isFile) {\n var subItems = parent.fileSystemData.filter(function (obj) { return obj.filterPath.includes(itemData.name); });\n subItems.forEach(function (subItem) {\n var index = findIndexById(parent, subItem.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n });\n }\n });\n }\n });\n}\n/**\n * Function to trigger rename operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerRenameOperation(parent, data, eventArgs) {\n var renameEventArgs = {\n cancel: false,\n newName: getValue('newName', data),\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeRename', renameEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.newName)) {\n var fileData = filterById(parent, args.itemData[0].id);\n fileData.name = args.newName;\n }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target = args.targetData;\n var getTargetFiles = filterByParent(parent, target.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target.hasChild) {\n target.hasChild = !currItem.isFile;\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentID) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target.id;\n fileData.filterPath = target.id === 0 ? '\\\\' : target.filterPath + target.name + '\\\\';\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' ? 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)\n || (event === 'paste-end' && (parent.targetModule === 'largeiconsview' || parent.targetModule === 'detailsview'))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: isMultipleFiles ? null : path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n var intl = new Internationalization(parent.locale);\n if (!isNOU(result.files)) {\n setDateObject(result.files, intl, getDateFormat(parent));\n for (var i = 0, len = result.files.length; i < len; i++) {\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read' || isFileSystemData(parent) && getValue('action', data) === 'search') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (!isNOU(result.error) && result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n 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/* 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 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/* 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 parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/'));\n parent.itemData[0] = parent.renamedItem;\n if (getValue('filterPath', parent.renamedItem) === getValue('filterPath', parent.itemData[0]) && parent.pathNames.length > 1) {\n parent.pathNames[parent.pathNames.length - 1] = parent.renameText;\n }\n read(parent, events.pathChanged, parent.path === '/' ? parent.path : getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/') + parent.renamedItem.name + '/');\n parent.renamedItem = null;\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n }\n catch (error) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n try {\n var moveorcopyEventArgs = {\n itemData: result.files,\n isCopy: operation === 'copy' ? true : false,\n path: path,\n targetData: parent.itemData[0],\n targetPath: parent.path\n };\n parent.trigger('move', moveorcopyEventArgs);\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n }\n catch (error) {\n handleCatchError(parent, error, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n try {\n var deleteEventArgs = {\n itemData: result.files,\n path: path\n };\n parent.trigger('delete', deleteEventArgs);\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n try {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(parent, event, path, searchString, showHiddenItems, caseSensitive) {\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var ajaxSettings = {\n url: downloadUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { data: data, cancel: false, useFormPost: true, ajaxSettings: ajaxSettings };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n if (downloadArgs.useFormPost) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n else {\n try {\n var contentDisposition_1;\n var fileName_1;\n var fetch_1 = new Fetch({\n url: getValue('url', downloadArgs.ajaxSettings),\n type: getValue('type', downloadArgs.ajaxSettings),\n contentType: getValue('contentType', downloadArgs.ajaxSettings),\n responseType: getValue('responseType', downloadArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', downloadArgs.ajaxSettings),\n onLoad: function (e) {\n contentDisposition_1 = e.headers.get('Content-Disposition');\n if (contentDisposition_1) {\n var filenameMatch = contentDisposition_1.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/);\n var extractedFilename = filenameMatch && filenameMatch[1];\n fileName_1 = extractedFilename ? extractedFilename.replace(/['\"]/g, '') : fileName_1;\n }\n else {\n fileName_1 = parent.itemData.length > 1 ? 'files.zip' : getValue('isFile', parent.itemData[0]) ? getValue('name', parent.itemData[0]) : getValue('name', parent.itemData[0]) + '.zip';\n }\n },\n onSuccess: function (e) {\n parent.trigger('success', downloadArgs);\n var blob = e;\n var blobUrl = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.href = blobUrl;\n link.download = fileName_1;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.downloadUrl\n }\n };\n createDialog(parent, 'Error', result);\n parent.trigger('failure', downloadArgs);\n }\n });\n fetch_1.send(JSON.stringify(downloadArgs.data));\n }\n catch (error) {\n handleCatchError(parent, error, 'download');\n }\n }\n }\n });\n}\n/**\n * Function for on catch handler in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {any} error - specifies the catch error.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction handleCatchError(parent, error, action) {\n var errorResult = {\n files: null,\n error: {\n message: error.message,\n fileExists: null\n }\n };\n onFailure(parent, errorResult, action);\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details) {\n var options = getOptions(parent, text, e, details);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n var index;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index = val.name.indexOf('.') + 1;\n return (index === 0 && (!val.isFile)) ? 'Folder' : ((index !== 0) ? val.name.substr(index).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] === undefined) {\n strArr = details.name.split(',').map(function (val) {\n index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = (parent.activeModule === 'navigationpane') ? getValue('filterPath', parent.itemData[0]).replace(/\\\\/g, '/') : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\n template: '<span class=\"e-fe-text\">${name}</span>',\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n this.items = [];\n this.items = this.renderList(args);\n if (this.parent.sortComparer && this.parent.sortBy !== 'None') {\n this.items = this.allItems = DataUtil.sort(this.items, this.parent.sortBy, this.comparer.bind(this));\n }\n else {\n this.items = this.allItems = getSortedData(this.parent, this.items);\n }\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUIVirtualization();\n }\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.listElements.setAttribute('aria-label', 'listbox');\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.comparer = function (x, y) {\n if (this.parent.sortOrder === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return this.parent.sortComparer(x, y);\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: false,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.dragData.push(this.getItemObject(activeEle[parseInt(i.toString(), 10)]));\n this.parent.activeElements.push(activeEle[i]);\n }\n getModule(this.parent, dragLi);\n this.parent.dragPath = this.parent.path;\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n LargeIconsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, '.e-list-item');\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n var info = this.getItemObject(dropLi);\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n else {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n LargeIconsView.prototype.getModuleName = function () {\n return 'largeiconsview';\n };\n LargeIconsView.prototype.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n this.renderCheckbox(args);\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imgUrl = getImageUrl(this.parent, items[i]);\n setValue('_fm_imageUrl', imgUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem) {\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 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 eve.originalEvent.preventDefault();\n if (_this.parent.isDevice) {\n _this.tapCount = eve.tapCount;\n _this.tapEvent = eve;\n setTimeout(function () {\n if (_this.tapCount > 0) {\n _this.doTapAction(_this.tapEvent);\n }\n _this.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n _this.dblClickHandler(eve);\n }\n else {\n _this.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n _this.multiSelect = _this.parent.allowMultiSelection ? true : false;\n if (_this.parent.allowMultiSelection) {\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n _this.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if (e.which === 3 && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.addActive(item);\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (e.ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (e.ctrlKey && e.shiftKey) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !e.ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey) {\n if (!(e && e.ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var text = getValue('name', details_1);\n if (!_this.parent.isFile) {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imgUrl);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n LargeIconsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.FOCUS, this.element);\n };\n LargeIconsView.prototype.getActiveItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n };\n LargeIconsView.prototype.getFirstItem = function () {\n return this.itemList[0];\n };\n LargeIconsView.prototype.getLastItem = function () {\n return this.itemList[this.itemList.length - 1];\n };\n LargeIconsView.prototype.navigateItem = function (item) {\n this.setFocus(item);\n };\n LargeIconsView.prototype.navigateDown = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards, this.perRow);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.navigateRight = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.getNextItem = function (li, isTowards, perRow) {\n if (isNOU(li)) {\n return this.getFocusedItem() || this.getActiveItem() || this.getFirstItem();\n }\n var index = this.itemList.indexOf(li);\n var nextItem;\n do {\n if (isTowards) {\n index = perRow ? index + perRow : index + 1;\n }\n else {\n index = perRow ? index - perRow : index - 1;\n }\n nextItem = this.itemList[index];\n if (this.parent.enableVirtualization && isNOU(nextItem)) {\n var marginValue = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-bottom'), 10);\n var scrollHeight = this.itemList[0].getBoundingClientRect().height + marginValue;\n this.element.firstElementChild.scrollTo(this.element.firstElementChild.scrollTop, this.element.firstElementChild.scrollTop + scrollHeight);\n }\n if (isNOU(nextItem)) {\n return li;\n }\n } while (!isVisible(nextItem));\n return nextItem;\n };\n LargeIconsView.prototype.setFocus = function (nextItem) {\n if (!isNOU(nextItem)) {\n var fileSelectionArgs = this.triggerSelection('select', nextItem);\n if (fileSelectionArgs.cancel !== true) {\n this.startItem = nextItem;\n this.clearSelect();\n this.addActive(nextItem);\n this.addFocus(nextItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', nextItem);\n }\n }\n };\n LargeIconsView.prototype.spaceKey = function (fItem) {\n if (!isNOU(fItem) && !fItem.classList.contains(CLS.ACTIVE)) {\n var fileSelectionArgs = this.triggerSelection('select', fItem);\n if (fileSelectionArgs.cancel !== true) {\n this.addActive(fItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', fItem);\n }\n }\n };\n LargeIconsView.prototype.ctrlAKey = function (firstItem, lastItem) {\n if (this.parent.allowMultiSelection && !isNOU(firstItem)) {\n this.startItem = firstItem;\n var eveArgs = { ctrlKey: true, shiftKey: true };\n var liParent = this.element.querySelector('.' + CLS.LIST_PARENT);\n var liScrPos = liParent.scrollTop;\n var getCurFocusedItem = this.getFocusedItem();\n this.doSelection(lastItem, eveArgs);\n liParent.scrollTop = liScrPos;\n if (!isNOU(getCurFocusedItem)) {\n this.addFocus(getCurFocusedItem);\n }\n }\n };\n LargeIconsView.prototype.csEndKey = function (lastItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(lastItem);\n }\n else if (!isNOU(lastItem)) {\n if (e.action === 'ctrlEnd') {\n this.addFocus(lastItem);\n }\n else {\n this.doSelection(lastItem, e);\n }\n }\n };\n LargeIconsView.prototype.csHomeKey = function (firstItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(firstItem);\n }\n else if (!isNOU(firstItem)) {\n if (e.action === 'ctrlHome') {\n this.addFocus(firstItem);\n }\n else {\n this.doSelection(firstItem, e);\n }\n }\n };\n LargeIconsView.prototype.csDownKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, true);\n }\n else {\n var dItem = this.getNextItem(fItem, true, this.perRow);\n if (!isNOU(dItem)) {\n if (e.action === 'ctrlDown') {\n this.addFocus(dItem);\n }\n else {\n this.doSelection(dItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csLeftKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, false);\n }\n else {\n var lItem = this.getNextItem(fItem, false);\n if (!isNOU(lItem)) {\n if (e.action === 'ctrlLeft') {\n this.addFocus(lItem);\n }\n else {\n this.doSelection(lItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csRightKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, true);\n }\n else {\n var rItem = this.getNextItem(fItem, true);\n if (!isNOU(rItem)) {\n if (e.action === 'ctrlRight') {\n this.addFocus(rItem);\n }\n else {\n this.doSelection(rItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csUpKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, false);\n }\n else {\n var uItem = this.getNextItem(fItem, false, this.perRow);\n if (!isNOU(uItem)) {\n if (e.action === 'ctrlUp') {\n this.addFocus(uItem);\n }\n else {\n this.doSelection(uItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.addActive = function (nextItem) {\n if (!isNOU(nextItem)) {\n if (!nextItem.classList.contains(CLS.ACTIVE)) {\n this.parent.selectedItems.push(this.getDataName(nextItem));\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n addClass([nextItem], [CLS.ACTIVE]);\n nextItem.setAttribute('aria-selected', 'true');\n this.checkState(nextItem, true);\n }\n this.parent.visitedItem = nextItem;\n }\n };\n LargeIconsView.prototype.removeActive = function (preItem) {\n if (!isNOU(preItem)) {\n removeClass([preItem], [CLS.ACTIVE]);\n if (this.parent.allowMultiSelection) {\n preItem.setAttribute('aria-selected', 'false');\n }\n else {\n preItem.removeAttribute('aria-selected');\n }\n this.checkState(preItem, false);\n var index = this.parent.selectedItems.indexOf(this.getDataName(preItem));\n if (index > -1) {\n this.parent.selectedItems.splice(index, 1);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n this.parent.visitedItem = null;\n }\n };\n LargeIconsView.prototype.getDataName = function (item) {\n var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.splitterResizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.getItemCount = function () {\n var perRow = 1;\n if (this.itemList) {\n for (var i = 0, len = this.itemList.length - 1; i < len; i++) {\n if (this.itemList[i].getBoundingClientRect().top === this.itemList[i + 1].getBoundingClientRect().top) {\n perRow++;\n }\n else {\n break;\n }\n }\n }\n this.perRow = perRow;\n };\n LargeIconsView.prototype.triggerSelection = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null\n : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data\n : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n LargeIconsView.prototype.addSelection = function (data) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var newData = new DataManager(this.items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (newData.length > 0) {\n resultData = new DataManager(newData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n var index = this.items.indexOf(resultData[0]);\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[index], eveArgs);\n }\n };\n LargeIconsView.prototype.updateSelectedData = function () {\n var data = [];\n var items = selectAll('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n for (var i = 0; i < items.length; i++) {\n data[i] = this.getItemObject(items[i]);\n }\n this.parent.itemData = data;\n };\n LargeIconsView.prototype.onMethodCall = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n var action = getValue('action', args);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', args));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', args));\n break;\n case 'openFile':\n this.openFile(getValue('id', args));\n break;\n case 'renameFile':\n this.isInteraction = false;\n this.isInteracted = false;\n this.renameFile(getValue('id', args), getValue('newName', args));\n break;\n case 'createFolder':\n this.isInteraction = false;\n this.isInteracted = false;\n break;\n case 'clearSelection':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onClearAllInit();\n break;\n case 'selectAll':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onSelectAllInit();\n break;\n }\n };\n LargeIconsView.prototype.getItemsIndex = function (items) {\n var indexes = [];\n var isFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filterName = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !isFilter) {\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filterName, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n }\n else {\n for (var i = 0, len = this.items.length; i < len; i++) {\n var name_2 = getValue('filterPath', this.items[i]) + getValue('name', this.items[i]);\n if ((items.indexOf(name_2) !== -1) || (items.indexOf(getValue(filterName, this.items[i])) !== -1)) {\n indexes.push(i);\n }\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var indexes = this.getItemsIndex(ids);\n if (indexes.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < indexes.length; i++) {\n data[i] = this.items[indexes[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var index = this.getItemsIndex(ids);\n if (index.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < index.length; i++) {\n data[i] = this.items[index[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n this.doOpenAction(this.itemList[indexes[0]]);\n }\n };\n LargeIconsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n updateRenamingData(this.parent, this.items[indexes[0]]);\n if (isNOU(name)) {\n doRename(this.parent);\n }\n else {\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n rename(this.parent, this.parent.path, name);\n }\n }\n }\n };\n return LargeIconsView;\n}());\nexport { LargeIconsView };\n","import { EventHandler, closest, isNullOrUndefined, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, addClass, removeClass, remove, createElement } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { read } from '../common/operations';\nimport { getLocaleText, searchWordHandler } from '../common/utility';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * BreadCrumbBar module\n */\nvar BreadCrumbBar = /** @class */ (function () {\n /**\n * constructor for addressbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies parent element.\n * @private\n *\n */\n function BreadCrumbBar(parent) {\n this.addressPath = '';\n this.addressBarLink = '';\n this.searchTimer = null;\n this.searchWrapWidth = null;\n this.parent = parent;\n this.keyConfigs = {\n enter: 'enter'\n };\n this.render();\n }\n BreadCrumbBar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var value = e.newProp.searchSettings;\n switch (prop) {\n case 'searchSettings':\n if (!isNullOrUndefined(value.allowSearchOnTyping)) {\n this.searchEventBind(value.allowSearchOnTyping);\n }\n if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&\n !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&\n isNullOrUndefined(value.ignoreCase))) {\n searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);\n }\n break;\n }\n }\n };\n BreadCrumbBar.prototype.render = function () {\n this.addEventListener();\n };\n BreadCrumbBar.prototype.onPathChange = function () {\n var pathNames = this.parent.pathNames;\n var paths = this.parent.path.split('/');\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var addressbarLI = null;\n var pathNamesLen = pathNames.length;\n if (pathNames.length > 0) {\n var id = '';\n for (var i = 0; i < pathNamesLen; i++) {\n var addressATag = null;\n addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });\n for (var j = 0; j <= i; j++) {\n id = id + paths[j] + '/';\n }\n addressbarLI.setAttribute('data-utext', id);\n if (i !== 0) {\n var icon = createElement('span', { className: CLS.ICONS });\n addressbarLI.appendChild(icon);\n }\n if (pathNamesLen - i !== 1) {\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressbarLI.setAttribute('tabindex', '0');\n }\n else {\n addressATag = createElement('span', { className: CLS.LIST_TEXT });\n }\n id = '';\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n };\n ContextMenu.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: false,\n element: args.element,\n event: args.event,\n isFocused: args.isFocused,\n fileDetails: [this.menuItemData],\n items: args.items,\n parentItem: args.parentItem,\n menuType: this.menuType\n };\n this.parent.trigger('menuClose', eventArgs, function (menuCloseArgs) {\n if (menuCloseArgs.cancel) {\n args.cancel = menuCloseArgs.cancel;\n return;\n }\n });\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule === 'navigationpane') {\n this.parent.pathId.pop();\n var parentKey = [];\n var itemKeys = Object.keys(this.parent.feParent);\n for (var _i = 0, itemKeys_1 = itemKeys; _i < itemKeys_1.length; _i++) {\n var item = itemKeys_1[_i];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var itemData = getValue(item, this.parent.feParent);\n if (this.parent.pathNames.indexOf(itemData.name) !== -1) {\n parentKey.push(itemData._fm_id);\n }\n }\n this.parent.pathId.push(parentKey[parentKey.length - 1]);\n this.parent.navigationpaneModule.treeObj.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n var selected = false;\n var uid;\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest('div');\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('data-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n if (!isNOU(uid)) {\n this.parent.navigationpaneModule.treeObj.selectedNodes = [uid];\n }\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n else {\n var itemsToRemove = ['Delete', 'Rename', 'Cut', 'Copy'];\n for (var i = 0; i < this.disabledItems.length; i++) {\n var item = this.disabledItems[i];\n if (itemsToRemove.indexOf(item) !== -1) {\n this.disabledItems.splice(i, 1);\n i--;\n }\n }\n }\n /* istanbul ignore next */\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n else {\n var pasteIndex = this.disabledItems.indexOf('Paste');\n if (pasteIndex !== -1) {\n this.disabledItems.splice(pasteIndex, 1);\n }\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.parent.navigationpaneModule.treeObj.selectedNodes[0] + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n else {\n var indexToRemove = this.disabledItems.indexOf('Open');\n if (indexToRemove !== -1) {\n this.disabledItems.splice(indexToRemove, 1);\n }\n }\n if (this.parent.selectedItems.length === 0) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n }\n else if (this.parent.activeModule !== 'navigationpane') {\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename', 'Paste');\n }\n }\n };\n ContextMenu.prototype.setFileItem = function () {\n this.menuType = 'file';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.file.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename');\n }\n };\n ContextMenu.prototype.setLayoutItem = function (target) {\n this.menuType = 'layout';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.layout.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (!this.parent.allowMultiSelection || ((this.parent.view === 'LargeIcons' &&\n (closest(target, '#' + this.parent.element.id + CLS.LARGEICON_ID).getElementsByClassName(CLS.EMPTY).length !== 0))\n || (this.parent.view === 'Details' &&\n (closest(target, '#' + this.parent.element.id + CLS.GRID_ID).getElementsByClassName(CLS.EMPTY).length !== 0)))) {\n this.disabledItems.push('SelectAll');\n }\n else {\n this.disabledItems = this.disabledItems.filter(function (item) { return item !== 'SelectAll'; });\n }\n if (this.parent.selectedNodes.length === 0) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n else {\n return -1;\n }\n };\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n var args = { target: this.menuTarget };\n this.parent.notify(events.menuItemData, args);\n return this.parent.itemData[0];\n }\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onSelect = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var itemText = args.item.id.substr((this.parent.element.id + '_cm_').length);\n var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n _this.isMenuItemClicked = true;\n switch (itemText) {\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'paste':\n if (_this.menuType === 'folder') {\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n _this.parent.folderPath = _this.parent.path;\n }\n else {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'name':\n case 'size':\n case 'date':\n case 'ascending':\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.split(' ').join('').toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, detach, selectAll, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem, closePopup } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.existingFileCount = 0;\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not\n _this.isMac = false;\n _this.dragSelectedItems = [];\n FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);\n return _this;\n }\n FileManager_1 = FileManager;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n FileManager.prototype.getModuleName = function () {\n return 'filemanager';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n FileManager.prototype.preRender = function () {\n if (isNOU(this.element.id) || this.element.id === '') {\n this.element.setAttribute('id', getUniqueID('filemanager'));\n }\n this.ensurePath();\n this.feParent = [];\n this.feFiles = [];\n setAttr(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.isDevice = Browser.isDevice;\n this.isMobile = this.checkMobile();\n if (this.isMobile) {\n this.setProperties({ navigationPaneSettings: { visible: false } }, true);\n }\n var ele = closest(this.element, '.e-bigger');\n this.isBigger = ele ? true : false;\n this.activeModule = (this.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n createSpinner({ target: this.element }, createElement);\n this.addWrapper();\n this.keyConfigs = {\n altN: 'alt+n',\n f5: 'f5',\n ctrlShift1: 'ctrl+shift+1',\n ctrlShift2: 'ctrl+shift+2',\n ctrlU: 'ctrl+u'\n };\n this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale);\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string} - returns the persisted data.\n * @hidden\n */\n FileManager.prototype.getPersistData = function () {\n var keyEntity = ['view', 'path', 'selectedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n FileManager.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'breadcrumbbar',\n args: [this]\n });\n modules.push({\n member: 'largeiconsview',\n args: [this]\n });\n if (this.toolbarSettings.visible) {\n modules.push({\n member: 'toolbar',\n args: [this],\n name: 'Toolbar'\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this],\n name: 'NavigationPane'\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this],\n name: 'DetailsView'\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this],\n name: 'ContextMenu'\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this],\n name: 'Virtualization'\n });\n }\n return modules;\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n FileManager.prototype.render = function () {\n this.initialize();\n var slItems = isNOU(this.selectedItems) ? [] :\n this.allowMultiSelection ? this.selectedItems : this.selectedItems.slice(this.selectedItems.length - 1);\n this.setProperties({ selectedItems: slItems }, true);\n this.fileView = this.view;\n this.isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n this.setRtl(this.enableRtl);\n this.addEventListeners();\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n if (this.fileView === 'Details') {\n this.largeiconsviewModule.element.classList.add(CLS.DISPLAY_NONE);\n }\n this.adjustHeight();\n if (isNOU(this.navigationpaneModule)) {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n this.wireEvents();\n this.renderComplete();\n };\n FileManager.prototype.ensurePath = function () {\n var currentPath = this.path;\n if (isNOU(currentPath)) {\n currentPath = '/';\n }\n if (currentPath.lastIndexOf('/') !== (currentPath.length - 1)) {\n currentPath = currentPath + '/';\n }\n this.originalPath = currentPath;\n var paths = currentPath.split('/');\n this.setProperties({ path: paths[0] + '/' }, true);\n this.pathNames = [];\n this.pathId = ['fe_tree'];\n this.itemData = [];\n };\n FileManager.prototype.initialize = function () {\n if (this.isMobile) {\n addClass([this.element], CLS.MOBILE);\n }\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n this.addCssClass(null, this.cssClass);\n this.renderFileUpload();\n };\n FileManager.prototype.addWrapper = function () {\n var headerWrap = this.createElement('div', { id: this.element.id + CLS.TOOLBAR_ID });\n this.element.appendChild(headerWrap);\n var layoutWrap = this.createElement('div', {\n id: this.element.id + CLS.LAYOUT_ID, className: CLS.LAYOUT\n });\n this.element.appendChild(layoutWrap);\n var navigationWrap = this.createElement('div', {\n id: this.element.id + CLS.NAVIGATION_ID, className: CLS.NAVIGATION\n });\n var treeWrap = this.createElement('div', {\n id: this.element.id + CLS.TREE_ID\n });\n navigationWrap.appendChild(treeWrap);\n var contentWrap = this.createElement('div', {\n id: this.element.id + CLS.CONTENT_ID, className: CLS.LAYOUT_CONTENT\n });\n this.breadCrumbBarNavigation = this.createElement('div', {\n id: this.element.id + CLS.BREADCRUMBBAR_ID,\n className: CLS.BREADCRUMBS\n });\n contentWrap.appendChild(this.breadCrumbBarNavigation);\n var gridWrap = this.createElement('div', {\n id: this.element.id + CLS.GRID_ID\n });\n contentWrap.appendChild(gridWrap);\n var largeiconWrap = this.createElement('div', {\n id: this.element.id + CLS.LARGEICON_ID,\n className: CLS.LARGE_ICONS, attrs: { 'role': 'group' }\n });\n contentWrap.appendChild(largeiconWrap);\n var overlay = this.createElement('span', { className: CLS.OVERLAY });\n contentWrap.appendChild(overlay);\n var paneSettings;\n if (!this.enableRtl) {\n layoutWrap.appendChild(navigationWrap);\n layoutWrap.appendChild(contentWrap);\n paneSettings = [\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n },\n { size: '75%', min: '270px' }\n ];\n }\n else {\n layoutWrap.appendChild(contentWrap);\n layoutWrap.appendChild(navigationWrap);\n paneSettings = [\n { size: '75%', min: '270px' },\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n }\n ];\n }\n this.splitterObj = new Splitter({\n paneSettings: paneSettings,\n width: '100%',\n enableRtl: false,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n resizing: this.splitterResize.bind(this)\n });\n this.splitterObj.isStringTemplate = true;\n this.splitterObj.appendTo(layoutWrap);\n var dialogWrap = this.createElement('div', { id: this.element.id + CLS.DIALOG_ID });\n this.element.appendChild(dialogWrap);\n var menuWrap = this.createElement('ul', { id: this.element.id + CLS.CONTEXT_MENU_ID });\n this.element.appendChild(menuWrap);\n var dialogImgWrap = this.createElement('div', { id: this.element.id + CLS.IMG_DIALOG_ID });\n this.element.appendChild(dialogImgWrap);\n var extnDialogWrap = this.createElement('div', { id: this.element.id + CLS.EXTN_DIALOG_ID });\n this.element.appendChild(extnDialogWrap);\n var uploadDialogWrap = this.createElement('div', { id: this.element.id + CLS.UPLOAD_DIALOG_ID });\n this.element.appendChild(uploadDialogWrap);\n };\n FileManager.prototype.adjustHeight = function () {\n var toolbar = select('#' + this.element.id + CLS.TOOLBAR_ID, this.element);\n var toolBarHeight = toolbar ? toolbar.offsetHeight : 0;\n if (this.splitterObj) {\n this.splitterObj.height = (this.element.clientHeight - toolBarHeight).toString();\n this.splitterObj.dataBind();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.splitterResize = function () {\n this.notify(events.splitterResize, {});\n };\n FileManager.prototype.splitterAdjust = function () {\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n if (this.navigationPaneSettings.visible) {\n this.splitterObj.expand(this.enableRtl ? 1 : 0);\n bar.classList.remove(CLS.DISPLAY_NONE);\n }\n else {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n };\n FileManager.prototype.addCssClass = function (oldOne, newOne) {\n if (!isNOU(oldOne) && oldOne !== '') {\n removeClass([this.element], oldOne.split(' '));\n }\n if (!isNOU(newOne) && newOne !== '') {\n addClass([this.element], newOne.split(' '));\n }\n };\n FileManager.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n FileManager.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n FileManager.prototype.onContextMenu = function (e) {\n e.preventDefault();\n };\n FileManager.prototype.checkMobile = function () {\n return (/iphone|ipod|android|blackberry|opera|mini|windows\\sce|palm|smartphone|iemobile/i.test(Browser.userAgent.toLowerCase())\n && /mobile/i.test(Browser.userAgent.toLowerCase()));\n };\n FileManager.prototype.renderFileUpload = function () {\n var id = this.element.id + CLS.UPLOAD_ID;\n var uploadEle = this.createElement('input', { id: id, attrs: { name: 'uploadFiles', type: 'file' } });\n this.element.appendChild(uploadEle);\n this.uploadDialogObj = new Dialog({\n header: getLocaleText(this, 'Header-Upload'),\n content: uploadEle,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: false,\n isModal: true,\n width: '350px',\n target: this.popupTarget ? this.popupTarget : '#' + this.element.id,\n cssClass: getCssClass(this, this.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: this.locale,\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n enableRtl: this.enableRtl,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n open: this.onOpen.bind(this),\n close: this.onClose.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n this.uploadDialogObj.appendTo('#' + this.element.id + CLS.UPLOAD_DIALOG_ID);\n this.renderUploadBox();\n };\n FileManager.prototype.renderUploadBox = function () {\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n this.uploadObj = new Uploader({\n dropArea: select('#' + this.element.id + CLS.CONTENT_ID, this.element),\n asyncSettings: {\n saveUrl: uploadUrl,\n removeUrl: uploadUrl\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n removing: this.onRemoving.bind(this),\n canceling: this.onCancel.bind(this),\n clearing: this.onClearing.bind(this),\n selected: this.onSelected.bind(this),\n success: this.onUploadSuccess.bind(this),\n failure: this.onUploadFailure.bind(this),\n autoUpload: this.uploadSettings.autoUpload,\n minFileSize: this.uploadSettings.minFileSize,\n maxFileSize: this.uploadSettings.maxFileSize,\n allowedExtensions: this.uploadSettings.allowedExtensions,\n directoryUpload: this.uploadSettings.directoryUpload,\n fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadSuccess = function (files) {\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadFailure = function (files) {\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') !== -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireSelectOnDragEvent = function (isBind) {\n if (isNOU(this.view)) {\n return;\n }\n if (isBind) {\n this.viewElem = this.view === 'LargeIcons' ? this.largeiconsviewModule.element : this.element.querySelector('.e-gridcontent');\n }\n if (!this.viewElem) {\n return;\n }\n if (isBind) {\n if (this.allowMultiSelection) {\n EventHandler.add(this.viewElem, 'mousedown', this.onDragStart, this);\n this.on(events.layoutChange, this.onLayoutChange, this);\n this.on(events.selectionChanged, this.onLayoutChange, this);\n }\n }\n else {\n EventHandler.remove(this.viewElem, 'mousedown', this.onDragStart);\n this.off(events.layoutChange, this.onLayoutChange);\n this.off(events.selectionChanged, this.onLayoutChange);\n }\n };\n FileManager.prototype.wireEvents = function () {\n if (this.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n FileManager.prototype.unWireEvents = function () {\n this.wireSelectOnDragEvent(false);\n EventHandler.remove(window, 'resize', this.resizeHandler);\n this.keyboardModule.destroy();\n };\n FileManager.prototype.onDragStart = function (event) {\n if (this.viewElem) {\n if (this.allowDragAndDrop) {\n var targetElement = closest(event.target, this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-fe-text');\n if (targetElement) {\n return;\n }\n }\n event.preventDefault();\n this.dragX = event.pageX;\n this.dragY = event.pageY;\n if (!this.dragSelectElement) {\n this.dragSelectElement = createElement('div', {\n id: this.element.id + '_drag',\n className: 'e-filemanager e-drag-select',\n styles: 'left: ' + this.dragX + 'px;top: ' + this.dragY + 'px;'\n });\n document.body.append(this.dragSelectElement);\n }\n EventHandler.add(document, 'mouseup', this.onDragStop, this);\n EventHandler.add(this.viewElem, 'mousemove', this.onDrag, this);\n EventHandler.add(this.dragSelectElement, 'mousemove', this.onDrag, this);\n }\n };\n FileManager.prototype.onDrag = function (event) {\n event.stopPropagation();\n if (this.dragSelectElement) {\n var diffX = event.pageX - this.dragX;\n var diffY = event.pageY - this.dragY;\n setStyleAttribute(this.dragSelectElement, {\n 'left': diffX < 0 ? this.dragX + diffX + 'px' : this.dragX + 'px', 'top': diffY < 0 ? this.dragY + diffY + 'px' : this.dragY + 'px',\n 'height': Math.abs(diffY) + 'px', 'width': Math.abs(diffX) + 'px'\n });\n this.selectItems();\n }\n else {\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n };\n FileManager.prototype.onDragStop = function () {\n if (this.viewElem) {\n EventHandler.remove(document, 'mouseup', this.onDragStop);\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n if (this.dragSelectElement) {\n EventHandler.remove(this.dragSelectElement, 'mousemove', this.onDrag);\n if (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0) {\n this.setProperties({ selectedItems: this.dragSelectedItems });\n }\n this.dragSelectedItems = [];\n detach(this.dragSelectElement);\n this.dragSelectElement = null;\n }\n };\n FileManager.prototype.selectItems = function () {\n this.dragSelectedItems = [];\n var dragRect = this.dragSelectElement.getBoundingClientRect();\n var allItems = selectAll(this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-row', this.viewElem);\n removeClass(selectAll('.e-active', this.viewElem), ['e-active', 'e-focus']);\n removeClass(selectAll('.e-check', this.viewElem), ['e-check']);\n for (var _i = 0, allItems_1 = allItems; _i < allItems_1.length; _i++) {\n var item = allItems_1[_i];\n var itemRect = item.getBoundingClientRect();\n if (!(dragRect.right < itemRect.left || dragRect.left > itemRect.right\n || dragRect.bottom < itemRect.top || dragRect.top > itemRect.bottom)\n && (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0)) {\n if (this.viewElem.classList.contains('e-large-icons')) {\n item.classList.add('e-active');\n this.dragSelectedItems.push(item.getAttribute('title'));\n }\n else {\n addClass(selectAll('.e-rowcell', item), ['e-active']);\n this.dragSelectedItems.push(item.querySelector('.e-drag-text').textContent);\n }\n item.querySelector('.e-frame').classList.add('e-check');\n }\n }\n };\n FileManager.prototype.onLayoutChange = function () {\n if (this.enableRangeSelection) {\n this.unWireEvents();\n this.wireEvents();\n }\n };\n FileManager.prototype.setPath = function () {\n this.setProperties({ selectedItems: [] }, true);\n this.ensurePath();\n this.notify(events.clearPathInit, { selectedNode: this.pathId[0] });\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {FileManager} newProp\n * @param {FileManager} oldProp\n * @returns void\n * @private\n */\n /* istanbul ignore next */\n FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var height;\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 '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 this.refresh();\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n this.refresh();\n break;\n case 'height':\n height = !isNOU(newProp.height) ? formatUnit(newProp.height) : newProp.height;\n setAttr(this.element, { 'height': height });\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'locale':\n if (!isNOU(newProp.enableRtl)) {\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n }\n this.localeSetModelOption(newProp);\n break;\n case 'navigationPaneSettings':\n this.splitterAdjust();\n this.notify(events.modelChanged, { module: 'navigationpane', newProp: newProp, oldProp: oldProp });\n break;\n case 'path':\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n refresh(this);\n this.notify(events.sortByChange, {});\n if (this.view === 'Details') {\n this.notify(events.sortColumn, {});\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 this.refresh();\n break;\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n this.viewElem = null;\n this.dragSelectElement = null;\n this.dragSelectedItems = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Specifies the method that must be invoked to traverse the path backwards in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.traverseBackward = function () {\n if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {\n this.pathId.pop();\n this.pathNames.pop();\n var newPath = this.pathNames.slice(1).join('/');\n newPath = newPath === '' ? '/' : '/' + newPath + '/';\n this.setProperties({ path: newPath }, true);\n read(this, events.pathChanged, this.path);\n var treeNodeId = this.pathId[this.pathId.length - 1];\n this.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the method which must be invoked to programmatically close the dialog popup in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.closeDialog = function () {\n closePopup(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property([])\n ], FileManager.prototype, \"fileSystemData\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableRangeSelection\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeFolderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"folderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDelete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"delete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeRename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"rename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeMove\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"move\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"search\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n var _this = this;\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan_1 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan_1 = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>',\n beforeItemRender: function (args) {\n var tickIcon = args.item.iconCss;\n var viewText = args.item.text === getLocaleText(_this.parent, 'View-LargeIcons');\n var iconClass = tickIcon ? ' e-menu-icon ' + tickIcon : '';\n args.element.innerHTML = '<span class=\"' + iconClass + '\"></span>' + (viewText ? largeIconSpan_1 : gridSpan_1) + args.item.text;\n var span = args.element.firstChild;\n if (span && span.className === '') {\n args.element.removeChild(span);\n }\n }\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = Object.assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n if (this.itemList.length !== 0 && this.largeIconInstance.element.querySelector('.' + CLS.EMPTY)) {\n this.largeIconInstance.element.removeChild(this.largeIconInstance.element.querySelector('.' + CLS.EMPTY));\n }\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add('e-virtual-top');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add('e-virtual-bottom');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n *\n * @param {number} dataSourceLength The length of the data source.\n * @returns {number} The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount =\n Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) /\n (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount *\n (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength) {\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 this.expandTree = false;\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n var directories = getDirectories(files);\n var targetDirectory = this.getTreeData(target);\n if (directories.length > 0 && targetDirectory.length > 0 &&\n (directories[0].filterPath == null ||\n isNOU(targetDirectory[0])\n && targetDirectory[0].filterPath == null\n || directories[0].filterPath !==\n targetDirectory[0].filterPath)) {\n var length_1 = 0;\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line camelcase\n folders[parseInt(length_1.toString(), 10)]._fm_icon = 'e-fe-folder';\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick &&\n !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.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.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.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], !this.expandTree);\n }\n this.expandNodeTarget = '';\n }\n this.expandTree = false;\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.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.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.expandTree = this.treeObj.expandedNodes.indexOf(this.treeObj.selectedNodes[0]) !== -1;\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\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, '/');\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.selectedNodes = [e.selectedNode];\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\n return;\n }\n if (this.parent.hasId) {\n this.parent.isDropEnd = !this.parent.isPasteError;\n readDropPath(this.parent);\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop || isFileSystemData(this.parent) ? this.parent.dragData : this.parent.actionRecords;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n NavigationPane.prototype.getTreeData = function (args) {\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var 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.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 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 if (this.parent.isMobile) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick'\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n load: function () {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {number} - The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n var enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return \"<div class=\\\"e-fe-text\\\">\" + name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div><span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n var _loop_1 = function (i, len) {\n columns[i].headerText = getLocaleText(this_1.parent, columns[i].headerText);\n if (columns[i].field === 'name' && !isNOU(columns[i].template) && !(typeof columns[i].template === 'function')) {\n var template_1 = columns[i].template;\n columns[i].template = initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return template_1.replace(/\\${name}/g, name);\n });\n }\n };\n var this_1 = this;\n for (var i = 0, len = columns.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n if (this.parent.enableRangeSelection) {\n var HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };\n columns.push(HiddenName);\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var text = getValue('name', args.data);\n var textEle = args.row.querySelector('[title= \"' + text + '\"]');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n var _this = this;\n showSpinner(this.parent.element);\n var nameColumn = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === _this.parent.sortBy; });\n if (nameColumn && !('sortComparer' in nameColumn)) {\n var items = getSortedData(this.parent, (this.parent.enableVirtualization)\n ? args.result\n : this.gridObj.dataSource);\n args.result = items;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) ||\n ((this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization &&\n this.element.querySelector('.e-content').scrollTop === 0))) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.parent.createdItem) {\n this.selectRecords([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n }\n if (this.parent.layoutSelectedItems.length) {\n this.selectRecords(this.parent.layoutSelectedItems);\n }\n if (this.parent.renamedItem) {\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && !this.parent.hasId && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n DetailsView.prototype.addSelection = function (data) {\n var items = this.gridObj.getCurrentViewRecords();\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var pathField = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === 'filterPath'; });\n if ((this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) ||\n (!isNullOrUndefined(pathField) && !isNullOrUndefined(pathField.hideAtMedia) && pathField.hideAtMedia !== '')) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imgUrl);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath')) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 180px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 180px');\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && isNullOrUndefined(this.dragObj)) {\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n var info = null;\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n this.gridObj.getRowByIndex(args.rowIndex).removeAttribute('tabindex');\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n this.gridObj.getRowByIndex(lastItemIndex).querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n _this.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (_this.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', _this.parent.allowMultiSelection, _this.gridObj.selectionModule);\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = _this.gridObj.getRows().indexOf(row);\n _this.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.onBlur = function (e) {\n if ((e.relatedTarget !== null && closest(e.relatedTarget, '.e-grid') !== e.relatedTarget)) {\n return;\n }\n if (!isNOU(this.gridObj.element)) {\n var thElements = this.gridObj.element.querySelectorAll('th');\n for (var i = 0; i < thElements.length; i++) {\n if (thElements[i].classList.contains('e-focus')) {\n this.addFocus(null);\n }\n }\n }\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('data-rowindex'), 10) : null;\n };\n /* istanbul ignore next */\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1 && this.gridObj.allowSorting === true) {\n if (!e.target.classList.contains('e-fe-grid-icon')) {\n var direction = !e.target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n var currentField = this.gridObj.getColumnByUid(e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid')).field;\n this.gridObj.sortColumn(currentField, direction);\n if (!isNOU(this.getFocusedItem().nextSibling)) {\n this.getFocusedItem().nextSibling.setAttribute('tabindex', '0');\n }\n }\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else {\n this.addHeaderFocus(e);\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function (e) {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus;\n if (!isNOU(e.target) && e.target.classList.contains('e-defaultcursor')) {\n this.addFocus(0);\n nameFocus = e.target.nextElementSibling;\n }\n else if (!isNOU(this.gridObj.element.querySelector('.e-focus')) && (this.gridObj.element.querySelector('.e-focus').tagName === 'TH')) {\n nameFocus = this.gridObj.element.querySelector('.e-focus').nextElementSibling;\n this.addFocus(0);\n }\n else {\n nameFocus = select('th.e-fe-grid-icon', this.element);\n }\n if (!isNOU(nameFocus)) {\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n DetailsView.prototype.getRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["sortComparer","reference","comparer","referenceIsFile","test","comparerIsFile","referenceParts","comparerParts","replace","_","$1","$2","push","Infinity","length","referencePart","shift","comparerPart","comparisonResult","localeCompare","updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","ids","names","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","parseInt","toString","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","isFileSystemData","itemData","fileSystemData","read","events.layoutChange","searchSettings","filterType","filteredData","filter","obj","parentId","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","Search","events.search","showHiddenItems","getPathObject","caseSensitive","hiddenItems","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","eventArgs_1","fileDetails","imageUrl","trigger","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","eventArgs","Date","getTime","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","isNullOrUndefined","group","sortBy","lists","getObject","currFiles","feFiles","createEmptyElement","top","layoutElement","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","localeString","dateFormat","createdDate","modifiedDate","formatDate","format","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","includes","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","name_1","dragData","srcData","dragNodes","tempTarget","dropHandler","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","navigationpaneModule","treeObj","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","uploadObj","dropArea","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","screenY","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","responseData","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","isFileExists","some","findIndexById","findIndex","String","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","type","createErrorObject","triggerFolderCreation","createEventArgs","folderName","parentFolder","data_1","newObject","triggerDeleteOperation","deleteEventArgs","forEach","index","splice","subItem","triggerRenameOperation","renameEventArgs","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","getTargetFiles","currItem","subItems","parentID","fileData","pathArray","triggerSearchOperation","searchEventArgs","searchResults","searchText","triggerClientEvents","fn","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","idValue","isFileOperation","map","isMultipleFiles","itemNames","totalSize","getSize","reduce","accumulator","currentObject","location","multipleFiles","created","modified","performReadOperation","Ajax","result_1","triggerAjaxFailure","parse","send","toFixed","events.afterRequest","rootAliasName","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","copiedItems","events.selectionChanged","pop","handleCatchError","visible","nextElementSibling","createdItem","events.createEnd","renamedItem","Array","isArray","events.renameEndParent","renameText","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","responseType","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","contentDisposition_1","fileName_1","Fetch","onLoad","e","headers","get","filenameMatch","extractedFilename","blob","blobUrl","URL","createObjectURL","link","href","body","status","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","replaceItems","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","onDeleteSubmit","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","template","customAttributes","class","initializeCSPTemplate","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","slice","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","x","z","ondragstart","_this","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","cList","addActive","CLS.CHECK","triggerSelection","startIndex","endIndex","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","traverseBackward","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","getPropertyValue","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","isFocused","parentItem","menuType","menuCloseArgs","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","itemsToRemove","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","adjustHeight","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","splitterAdjust","bar","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","uploading","onUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","uploadSettings","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","removeEventListeners","wireSelectOnDragEvent","isBind","viewElem","onDragStart","enableRangeSelection","dragX","pageX","dragY","pageY","dragSelectElement","styles","append","onDragStop","onDrag","stopPropagation","diffX","diffY","setStyleAttribute","Math","abs","dragRect","allItems_1","itemRect","right","bottom","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","closeDialog","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","tickIcon","viewText","iconClass","firstChild","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","mergedItems","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getTreeData","getDragPath","getDropPath","nodeData","addChild","prevent","directories","targetDirectory","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","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","Grid","Resize","Sort","VirtualScroll","checkNameWidth","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enablePersistence","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","reactTemplateRender","emptyArgs","pane","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","HiddenName","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","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 * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (isFileSystemData(parent)) {\n if (value === '') {\n parent.itemData = parent.fileSystemData;\n read(parent, events.layoutChange, parent.path);\n }\n else {\n parent.searchSettings.filterType = isNOU(parent.searchSettings.filterType) ? 'contains' : parent.searchSettings.filterType;\n var filteredData = parent.fileSystemData.filter(function (obj) { return obj.parentId !== null; });\n var data = new DataManager(filteredData).\n executeLocal(new Query().where('name', parent.searchSettings.filterType, value, parent.searchSettings.ignoreCase));\n var searchValue = parent.searchSettings.ignoreCase ? value.toLowerCase() : value;\n parent.itemData = data;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchValue, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n return;\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {string} - returns the image url.\n * @private\n */\nexport function getImageUrl(parent, item) {\n var imgUrl = isFileSystemData(parent) ? getValue('imageUrl', item) : '';\n if (isFileSystemData(parent)) {\n var eventArgs_1 = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs_1);\n return eventArgs_1.imageUrl;\n }\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var fileName = encodeURIComponent(getValue('name', item));\n var fPath = getValue('filterPath', item);\n if (parent.hasId) {\n var imgId = getValue('id', item);\n imgUrl = baseUrl + pathUrl + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + pathUrl + encodeURIComponent(fPath.replace(/\\\\/g, '/')) + fileName;\n }\n else {\n imgUrl = baseUrl + pathUrl + parent.path + fileName;\n }\n imgUrl = imgUrl + '&time=' + (new Date().getTime()).toString();\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs.imageUrl;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\nexport function getName(parent, data) {\n var name = getValue('name', data);\n var fPath = getValue('filterPath', data);\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) && !isNOU(fPath)) {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(parent.path, '') + name;\n }\n return name;\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object[]} items - specifies the item elements.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None' && !isNullOrUndefined(parent.sortOrder)) {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n var lists = new DataManager(items).executeLocal(query);\n return getValue('records', lists);\n}\n/**\n * Gets the data object\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} key - specifies the key.\n * @param {string} value - specifies the value.\n * @returns {Object} - returns the sorted data.\n * @private\n */\nexport function getObject(parent, key, value) {\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var query = new Query().where(key, 'equal', value);\n var lists = new DataManager(currFiles).executeLocal(query);\n return lists[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 = getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\nexport function getDirectories(files) {\n return new DataManager(files).executeLocal(new Query().where(events.isFile, 'equal', false, false));\n}\n/**\n * set the Node ID\n *\n * @param {ReadArgs} result - specifies the result.\n * @param {string} rootId - specifies the rootId.\n * @returns {void}\n * @private\n */\nexport function setNodeId(result, rootId) {\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @param {Internationalization} localeString - The internationalization object for formatting dates.\n * @param {string} dateFormat - The date format string.\n * @returns {void}\n * @private\n */\nexport function setDateObject(args, localeString, dateFormat) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n if (isNOU(dateFormat)) {\n dateFormat = 'MM/dd/yyyy';\n }\n setValue('_fm_created', localeString.formatDate(createdDate, { format: dateFormat }), args[i]);\n setValue('_fm_modified', localeString.formatDate(modifiedDate, { format: dateFormat }), args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @param {IFileManager} [parent] - optional parameter representing the parent IFileManager.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n var data = getObject(parent, key, folders[parseInt(i.toString(), 10)]);\n if (!isNullOrUndefined(data)) {\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n parent.pathId.push(id);\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n }\n else {\n parent.originalPath = newPath;\n }\n read(parent, eventName, parent.path);\n break;\n }\n}\n/**\n * Opens the searched folder\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data\n * @returns {void}\n * @private\n */\nexport function openSearchFolder(parent, data) {\n parent.originalPath = getFullPath(parent, data, parent.path);\n var root = getValue(parent.pathId[0], parent.feParent);\n var isRoot = getValue('_fm_id', parent.itemData[0]) === 'fe_tree';\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n var searchData = getObject(parent, key, isFileSystemData(parent) ? getValue('id', data) : getValue('name', data));\n if (isNullOrUndefined(searchData)) {\n if (!isRoot) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n }\n else {\n setNextPath(parent, parent.path);\n return;\n }\n }\n else {\n var id = getValue('_fm_id', searchData);\n parent.setProperties({ path: parent.originalPath }, true);\n parent.pathId.push(id);\n parent.itemData = [searchData];\n parent.pathNames.push(getValue('name', searchData));\n }\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n if (parent.activeModule === 'navigationpane' && !parent.selectedNodes[0].includes('/')) {\n parent.targetPath = getValue('filterPath', parent.actionRecords[0]).replace(/\\\\/g, '/');\n }\n var subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);\n if (!subFolder) {\n if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {\n parent.notify(events.pasteInit, {});\n paste(parent, parent.targetPath, parent.selectedNodes, path, parent.fileAction, [], parent.actionRecords);\n }\n else {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n removeBlur(parent);\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n }\n }\n }\n}\n/**\n * Validates the sub folders\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {'{ [key: string]: Object; }[]'} data - specifies the data.\n * @param {string} dropPath - specifies the drop path.\n * @param {string} dragPath - specifies the drag path.\n * @returns {boolean} - returns the validated sub folder.\n * @private\n */\nexport function validateSubFolder(parent, data, dropPath, dragPath) {\n var subFolder = false;\n for (var i = 0; i < data.length; i++) {\n if (!getValue('isFile', data[i])) {\n var tempTarget = getFullPath(parent, data[i], dragPath);\n if (dropPath.indexOf(tempTarget) === 0) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Sub-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n else {\n var name_1 = parent.dragData[i] ? parent.dragData[i].name : null;\n var srcData = isFileSystemData(parent) ? name_1 : parent.dragNodes[i];\n var len = 0;\n if (srcData) {\n len = srcData.lastIndexOf('/');\n }\n var path = '';\n if (len > 0) {\n path = dragPath + srcData.substring(0, len + 1);\n }\n if (path === dropPath) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n }\n return subFolder;\n}\n/**\n * Validates the drop handler\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function dropHandler(parent) {\n parent.isDragDrop = true;\n if (parent.dragData.length !== 0) {\n parent.dragPath = parent.dragPath.replace(/\\\\/g, '/');\n parent.dropPath = parent.dropPath.replace(/\\\\/g, '/');\n var subFolder = validateSubFolder(parent, parent.dragData, parent.dropPath, parent.dragPath);\n if (!subFolder && (parent.dragPath !== parent.dropPath)) {\n parent.itemData = [parent.dropData];\n paste(parent, parent.dragPath, parent.dragNodes, parent.dropPath, 'move', [], parent.dragData);\n parent.notify(events.pasteInit, {});\n }\n }\n}\n/**\n * Gets the parent path\n *\n * @param {string} oldPath - specifies the old path.\n * @returns {string} - returns the parent path.\n * @private\n */\nexport function getParentPath(oldPath) {\n var path = oldPath.split('/');\n var newPath = path[0] + '/';\n for (var i = 1; i < path.length - 2; i++) {\n newPath += path[i] + '/';\n }\n return newPath;\n}\n/**\n * Gets the directory path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {ReadArgs} args - returns the read arguements.\n * @returns {string} - returns the directory path\n * @private\n */\nexport function getDirectoryPath(parent, args) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', args.cwd) + '/';\n var fPath = getValue(parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return parent.hasId && !isNullOrUndefined(parent.ajaxSettings.url) ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return isFileSystemData(parent) ? filePath : parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n 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 parent.trigger('success', { action: operation, result: result });\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} screenY - specifies the vertical (Y) coordinate of the mouse cursor position relative to the entire screen.\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, screenY, clientY) {\n var position;\n var elementData = scrollParent.getBoundingClientRect();\n var node = select('.' + nodeClass, scrollParent);\n if ((screenY >= (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.screenY, 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.screenY, 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.screenY, args.event.y);\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\nexport function createDeniedDialog(parent, data, action) {\n var message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\nexport function hasReadAccess(data) {\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\nexport function hasEditAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\nexport function hasContentAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\nexport function hasUploadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\nexport function hasDownloadAccess(data) {\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n/**\n * Close dialog popup handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function closePopup(parent) {\n if (!isNullOrUndefined(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n}\n/**\n * Access control handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} itemData - specifies the item elements.\n * @param {string} action - specifies the action.\n * @param {boolean} isPathPermision - specifies the path permission.\n * @returns {string} returns the path.\n * @private\n */\nexport function getAccessDetails(parent, itemData, action, isPathPermision) {\n var accessMessage = '';\n for (var i = 0; i < itemData.length; i++) {\n var permission = getValue('permission', itemData[i]);\n if (permission == null) {\n permission = undefined;\n }\n if (isPathPermision) {\n if (permission && (!getValue('read', permission) || !getValue('writeContents', permission))) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', 'writeContents');\n }\n }\n }\n else {\n var copyOrMovePermission = action === 'copy' ? getValue('copy', permission) : getValue('write', permission);\n if (permission && (!getValue('read', permission) || !copyOrMovePermission)) {\n accessMessage = getValue('message', getValue('permission', itemData[i]));\n if (accessMessage === '') {\n accessMessage = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', itemData[i])).replace('{1}', action);\n }\n }\n }\n if (accessMessage !== '') {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: '401',\n message: accessMessage,\n fileExists: null\n },\n files: null\n };\n break;\n }\n }\n return accessMessage;\n}\n","import { Ajax, Fetch, createElement, select, extend, Internationalization } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath, getAccessDetails } from '../common/utility';\nimport { getUid } from '@syncfusion/ej2-grids';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n var filterData;\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Function for getDateFormat in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\n if (!columns) {\n return null;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === '_fm_modified') {\n if (!isNOU(columns[i].format)) {\n dateFormat = columns[i].format.toString();\n }\n break;\n }\n }\n return dateFormat;\n}\n/**\n * Checks whether fileSystemData is enabled.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns the boolean value.\n */\nexport function isFileSystemData(parent) {\n var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);\n return isFileSystemData;\n}\n/**\n * Function to check whether file already exist or not.\n *\n * @param {Record<string, any>} fileSystemData - specifies the file data.\n * @param {string} name - specifies the name.\n * @returns {boolean} - returns the boolean value.\n * @private\n */\nfunction isFileExists(fileSystemData, name) {\n var isExists = fileSystemData.some(function (item) { return item.name === name; });\n return isExists;\n}\n/**\n * Function to find the index value of a file or folder.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number} id - specifies the id.\n * @returns {number} - returns the index value.\n * @private\n */\nfunction findIndexById(parent, id) {\n var index = parent.fileSystemData.findIndex(function (item) { return String(item.id) === String(id); });\n return index;\n}\n/**\n * Function to get the entire data of a file or folder using id value.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} id - specifies the id.\n * @returns {Object} - returns the data.\n * @private\n */\nfunction filterById(parent, id) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];\n return data;\n}\n/**\n * Function to get the entire data of a file or folder for a parent.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {number | string} parentId - specifies the parent id.\n * @returns {Object[]} - returns the data.\n * @private\n */\nfunction filterByParent(parent, parentId) {\n var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });\n return data;\n}\n/**\n * Function to create a new copied file or folder.\n *\n * @param {Record<string, any>} data - specifies the file or folder data.\n * @param {Record<string, any>} target - specifies the target data.\n * @param {string} itemName - specifies the item name.\n * @param {boolean} isCopy - specifies the copy operation.\n * @returns {Record<string, Object>} - returns the data.\n * @private\n */\nfunction createNewItem(data, target, itemName, isCopy) {\n var newItem = {};\n //Construct the new folder details.\n for (var key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newItem[key] = null;\n }\n }\n var currentDate = new Date();\n var folderPath = target.id !== 0 ? target.filterPath + target.name : '\\\\';\n Object.assign(newItem, {\n dateCreated: currentDate,\n dateModified: currentDate,\n filterPath: folderPath,\n hasChild: isCopy ? data.hasChild : false,\n id: getUid(itemName === null ? data.name : itemName),\n isFile: isCopy ? data.isFile : false,\n name: itemName === null ? data.name : itemName,\n parentId: target.id,\n size: isCopy ? data.size : 0,\n type: isCopy ? data.type : ''\n });\n return newItem;\n}\n/**\n * Function to create an error response.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} message - specifies the error message.\n * @param {string} code - specifies the error code.\n * @param {Object[]} fileName - specifies the file name.\n * @returns {void}\n * @private\n */\nfunction createErrorObject(parent, message, code, fileName) {\n parent.responseData = {\n cwd: null,\n details: null,\n error: {\n code: code,\n message: message,\n fileExists: fileName != null ? fileName : null\n },\n files: null\n };\n}\n/**\n * Function to trigger folder creation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerFolderCreation(parent, data, eventArgs) {\n var createEventArgs = {\n folderName: getValue('name', data),\n cancel: false,\n path: getValue('path', data),\n parentFolder: getValue('data', data)\n };\n parent.trigger('beforeFolderCreate', createEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.folderName)) {\n var data_1 = args.parentFolder[0];\n var newObject = createNewItem(data_1, data_1, args.folderName, false);\n parent.fileSystemData.push(newObject);\n }\n else {\n var message = 'A file or folder with the name ' + args.folderName + ' already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger delete operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerDeleteOperation(parent, data, eventArgs) {\n var deleteEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeDelete', deleteEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n args.itemData.forEach(function (itemData) {\n var index = findIndexById(parent, itemData.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n if (!itemData.isFile) {\n var subItems = parent.fileSystemData.filter(function (obj) { return obj.filterPath.includes(itemData.name); });\n subItems.forEach(function (subItem) {\n var index = findIndexById(parent, subItem.id);\n if (index !== -1) {\n parent.fileSystemData.splice(index, 1);\n }\n });\n }\n });\n }\n });\n}\n/**\n * Function to trigger rename operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerRenameOperation(parent, data, eventArgs) {\n var renameEventArgs = {\n cancel: false,\n newName: getValue('newName', data),\n itemData: getValue('data', data),\n path: getValue('path', data)\n };\n parent.trigger('beforeRename', renameEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n if (!isFileExists(parent.fileSystemData, args.newName)) {\n var fileData = filterById(parent, args.itemData[0].id);\n fileData.name = args.newName;\n }\n else {\n var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';\n createErrorObject(parent, message, '400', null);\n }\n }\n });\n}\n/**\n * Function to trigger move or copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerMoveOrCopyOperation(parent, data, eventArgs) {\n var moveEventArgs = {\n cancel: false,\n itemData: getValue('data', data),\n isCopy: getValue('action', data) === 'copy' ? true : false,\n path: getValue('path', data),\n targetData: getValue('targetData', data),\n targetPath: getValue('targetPath', data)\n };\n parent.trigger('beforeMove', moveEventArgs, function (args) {\n if (args.cancel) {\n eventArgs.cancel = true;\n return;\n }\n if (isFileSystemData(parent)) {\n var message = 'File Already Exists';\n var action = getValue('action', data);\n var itemPermission = getAccessDetails(parent, args.itemData, action, false);\n var pathPermission = getAccessDetails(parent, [args.targetData], action, true);\n var file_1 = [];\n parent.pasteNodes = [];\n if (itemPermission === '' && pathPermission === '') {\n if (args.isCopy) {\n var folderSubItems_1 = filterByParent(parent, args.targetData.id);\n var copiedFolders = args.itemData;\n copiedFolders.forEach(function (itemData) {\n if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {\n if (getValue('renameFiles', data).length > 0) {\n var names = itemData.name.split('.');\n var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n copyFolderItems(parent, itemData, args.targetData, name_1);\n parent.responseData.error = null;\n parent.existingFileCount++;\n return;\n }\n copyFolderItems(parent, itemData, args.targetData, null);\n }\n else {\n file_1.push(itemData.name);\n }\n });\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n return;\n }\n var target = args.targetData;\n var getTargetFiles = filterByParent(parent, target.id);\n for (var i = 0; i < args.itemData.length; i++) {\n var currItem = args.itemData[i];\n if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {\n if (!target.hasChild) {\n target.hasChild = !currItem.isFile;\n }\n if (!currItem.isFile) {\n //Check whether the source folder include other sub folders or not.\n var subItems = currItem.parentId !== 0\n ? filterByParent(parent, currItem.parentID) : [];\n var itemData = filterById(parent, currItem.parentId);\n itemData.hasChild = subItems.length > 1 ? true : false;\n }\n var fileData = filterById(parent, currItem.id);\n if (getValue('renameFiles', data).length > 0) {\n var names = currItem.name.split('.');\n currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';\n fileData.name = currItem.name;\n parent.responseData.error = null;\n parent.existingFileCount++;\n parent.dropData = target;\n parent.dropPath = args.path;\n var pathArray = args.targetPath.replace(/^\\/|\\/$/g, '').split('/');\n target = filterById(parent, pathArray[pathArray.length - 1]);\n }\n fileData.parentId = target.id;\n fileData.filterPath = target.id === 0 ? '\\\\' : target.filterPath + target.name + '\\\\';\n }\n else {\n file_1.push(currItem.name);\n }\n }\n if (file_1.length > 0) {\n createErrorObject(parent, message, '400', file_1);\n }\n }\n }\n });\n}\n/**\n * Function to trigger search operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerSearchOperation(parent, data, eventArgs) {\n var searchEventArgs = {\n searchResults: getValue('data', data),\n cancel: false,\n path: getValue('path', data),\n searchText: getValue('searchString', data),\n caseSensitive: getValue('caseSensitive', data),\n showHiddenItems: getValue('showHiddenItems', data)\n };\n parent.trigger('search', searchEventArgs, function (args) {\n setValue('data', args.searchResults, data);\n if (args.cancel) {\n eventArgs.cancel = true;\n }\n });\n}\n/**\n * Function to trigger client side events.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction triggerClientEvents(parent, data, eventArgs) {\n switch (getValue('action', data)) {\n case 'create': {\n triggerFolderCreation(parent, data, eventArgs);\n break;\n }\n case 'delete': {\n triggerDeleteOperation(parent, data, eventArgs);\n break;\n }\n case 'rename': {\n triggerRenameOperation(parent, data, eventArgs);\n break;\n }\n case 'move':\n case 'copy': {\n triggerMoveOrCopyOperation(parent, data, eventArgs);\n break;\n }\n case 'search': {\n triggerSearchOperation(parent, data, eventArgs);\n break;\n }\n }\n}\n/**\n * Creates an AJAX request for the file manager.\n *\n * @param {IFileManager} parent - The parent file manager instance.\n * @param {Object} data - The data object for the AJAX request.\n * @param {Function} fn - The callback function to be executed after the AJAX request.\n * @param {string} [event] - The event type for the AJAX request.\n * @param {string} [operation] - The operation type for the AJAX request.\n * @param {string} [targetPath] - The target path for the AJAX request.\n * @returns {void}\n * @private\n */\nfunction createAjax(parent, data, fn, event, operation, targetPath) {\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n triggerClientEvents(parent, data, eventArgs);\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n if (isFileSystemData(parent)) {\n var filePath = event === 'node-expand' || event === 'finalize-end' ? 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)\n || (event === 'paste-end' && (parent.targetModule === 'largeiconsview' || parent.targetModule === 'detailsview'))\n ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];\n var action = getValue('action', data);\n var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';\n if (action === 'read' || action === 'create' || event === 'rename-end') {\n var rootId = parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })\n .length > 0\n ? parent.fileSystemData\n .filter(function (item) { return isNOU(item.parentId); })[0].id\n : 0;\n parent.responseData = {\n cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),\n details: null,\n error: null,\n files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)\n };\n if (isNOU(parent.responseData.cwd)) {\n var message = 'Cannot load empty data within the File Manager.';\n createErrorObject(parent, message, '400', null);\n }\n }\n else if (isFileOperation && parent.responseData.error === null) {\n var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];\n if (itemData.length === 0) {\n itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });\n }\n parent.responseData = {\n cwd: null,\n details: null,\n error: null,\n files: itemData\n };\n }\n else if (getValue('action', data) === 'details') {\n var itemData = getValue('data', data);\n var details = itemData[0];\n var isMultipleFiles = itemData.length > 1;\n var itemNames = itemData.map(function (item) { return item.name; });\n var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);\n var path = (parent.pathNames.includes(details.name) ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);\n parent.responseData.details = Object.assign({\n location: isMultipleFiles ? null : path,\n multipleFiles: isMultipleFiles,\n name: itemNames.join(', '),\n size: totalSize\n }, isMultipleFiles ? {} : {\n created: details.dateCreated,\n isFile: details.isFile,\n modified: details.dateModified,\n permission: details.permission\n });\n }\n performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);\n return;\n }\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function to get file size.\n *\n * @param {number} size - specifies the size.\n * @returns {string} - returns the size.\n * @private\n */\nfunction getSize(size) {\n var hz;\n if (size < 1024) {\n hz = size + ' B';\n }\n else if (size < 1024 * 1024) {\n hz = (size / 1024).toFixed(2) + ' KB';\n }\n else if (size < 1024 * 1024 * 1024) {\n hz = (size / 1024 / 1024).toFixed(2) + ' MB';\n }\n else {\n hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n }\n return hz;\n}\n/**\n * Function to perform read operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {Function} fn - specifies the function.\n * @param {Object} data - specifies the data.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.\n * @returns {void}\n * @private\n */\nfunction performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n var intl = new Internationalization(parent.locale);\n if (!isNOU(result.files)) {\n setDateObject(result.files, intl, getDateFormat(parent));\n for (var i = 0, len = result.files.length; i < len; i++) {\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read' || isFileSystemData(parent) && getValue('action', data) === 'search') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function to copy operation.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} target - specifies the target.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction copyFolderItems(parent, data, target, itemName) {\n var newObject = createNewItem(data, target, itemName, true);\n parent.fileSystemData.push(newObject);\n parent.pasteNodes.push(newObject.id);\n var copiedItems = filterByParent(parent, data.id);\n for (var i = 0; i < copiedItems.length; i++) {\n copyFolderItems(parent, copiedItems[i], newObject, null);\n }\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (!isNOU(result.error) && result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n 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/* 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 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/* 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 parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/'));\n parent.itemData[0] = parent.renamedItem;\n if (getValue('filterPath', parent.renamedItem) === getValue('filterPath', parent.itemData[0]) && parent.pathNames.length > 1) {\n parent.pathNames[parent.pathNames.length - 1] = parent.renameText;\n }\n read(parent, events.pathChanged, parent.path === '/' ? parent.path : getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/') + parent.renamedItem.name + '/');\n parent.renamedItem = null;\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n }\n catch (error) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n handleCatchError(parent, error, 'rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n try {\n var moveorcopyEventArgs = {\n itemData: result.files,\n isCopy: operation === 'copy' ? true : false,\n path: path,\n targetData: parent.itemData[0],\n targetPath: parent.path\n };\n parent.trigger('move', moveorcopyEventArgs);\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n }\n catch (error) {\n handleCatchError(parent, error, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n try {\n var deleteEventArgs = {\n itemData: result.files,\n path: path\n };\n parent.trigger('delete', deleteEventArgs);\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n try {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(parent, event, path, searchString, showHiddenItems, caseSensitive) {\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n try {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n }\n catch (error) {\n handleCatchError(parent, error, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var ajaxSettings = {\n url: downloadUrl,\n type: 'POST',\n contentType: 'application/json',\n responseType: 'blob',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { data: data, cancel: false, useFormPost: true, ajaxSettings: ajaxSettings };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n if (downloadArgs.useFormPost) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n else {\n try {\n var contentDisposition_1;\n var fileName_1;\n var fetch_1 = new Fetch({\n url: getValue('url', downloadArgs.ajaxSettings),\n type: getValue('type', downloadArgs.ajaxSettings),\n contentType: getValue('contentType', downloadArgs.ajaxSettings),\n responseType: getValue('responseType', downloadArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', downloadArgs.ajaxSettings),\n onLoad: function (e) {\n contentDisposition_1 = e.headers.get('Content-Disposition');\n if (contentDisposition_1) {\n var filenameMatch = contentDisposition_1.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/);\n var extractedFilename = filenameMatch && filenameMatch[1];\n fileName_1 = extractedFilename ? extractedFilename.replace(/['\"]/g, '') : fileName_1;\n }\n else {\n fileName_1 = parent.itemData.length > 1 ? 'files.zip' : getValue('isFile', parent.itemData[0]) ? getValue('name', parent.itemData[0]) : getValue('name', parent.itemData[0]) + '.zip';\n }\n },\n onSuccess: function (e) {\n parent.trigger('success', downloadArgs);\n var blob = e;\n var blobUrl = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.href = blobUrl;\n link.download = fileName_1;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n onFailure: function (e) {\n var result = {\n error: {\n code: e.status.toString(),\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.downloadUrl\n }\n };\n createDialog(parent, 'Error', result);\n parent.trigger('failure', downloadArgs);\n }\n });\n fetch_1.send(JSON.stringify(downloadArgs.data));\n }\n catch (error) {\n handleCatchError(parent, error, 'download');\n }\n }\n }\n });\n}\n/**\n * Function for on catch handler in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {any} error - specifies the catch error.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction handleCatchError(parent, error, action) {\n var errorResult = {\n files: null,\n error: {\n message: error.message,\n fileExists: null\n }\n };\n onFailure(parent, errorResult, action);\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details) {\n var options = getOptions(parent, text, e, details);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n var index;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index = val.name.indexOf('.') + 1;\n return (index === 0 && (!val.isFile)) ? 'Folder' : ((index !== 0) ? val.name.substr(index).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] === undefined) {\n strArr = details.name.split(',').map(function (val) {\n index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = (parent.activeModule === 'navigationpane') ? getValue('filterPath', parent.itemData[0]).replace(/\\\\/g, '/') : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\n template: '<span class=\"e-fe-text\">${name}</span>',\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n this.items = [];\n this.items = this.renderList(args);\n if (this.parent.sortComparer && this.parent.sortBy !== 'None') {\n this.items = this.allItems = DataUtil.sort(this.items, this.parent.sortBy, this.comparer.bind(this));\n }\n else {\n this.items = this.allItems = getSortedData(this.parent, this.items);\n }\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUIVirtualization();\n }\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.listElements.setAttribute('aria-label', 'listbox');\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.comparer = function (x, y) {\n if (this.parent.sortOrder === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return this.parent.sortComparer(x, y);\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: false,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.dragData.push(this.getItemObject(activeEle[parseInt(i.toString(), 10)]));\n this.parent.activeElements.push(activeEle[i]);\n }\n getModule(this.parent, dragLi);\n this.parent.dragPath = this.parent.path;\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n LargeIconsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, '.e-list-item');\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n var info = this.getItemObject(dropLi);\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n else {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n LargeIconsView.prototype.getModuleName = function () {\n return 'largeiconsview';\n };\n LargeIconsView.prototype.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n this.renderCheckbox(args);\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n checkElement.setAttribute('aria-label', 'checkbox');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imgUrl = getImageUrl(this.parent, items[i]);\n setValue('_fm_imageUrl', imgUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n this.parent.activeModule = 'largeiconsview';\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem) {\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 if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n if (_this.parent.isDevice) {\n _this.tapCount = eve.tapCount;\n _this.tapEvent = eve;\n setTimeout(function () {\n if (_this.tapCount > 0) {\n _this.doTapAction(_this.tapEvent);\n }\n _this.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n _this.dblClickHandler(eve);\n }\n else {\n _this.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n _this.multiSelect = _this.parent.allowMultiSelection ? true : false;\n if (_this.parent.allowMultiSelection) {\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n _this.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if (e.which === 3 && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.addActive(item);\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (e.ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (e.ctrlKey && e.shiftKey) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !e.ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey) {\n if (!(e && e.ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var text = getValue('name', details_1);\n if (!_this.parent.isFile) {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imgUrl);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n LargeIconsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.FOCUS, this.element);\n };\n LargeIconsView.prototype.getActiveItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n };\n LargeIconsView.prototype.getFirstItem = function () {\n return this.itemList[0];\n };\n LargeIconsView.prototype.getLastItem = function () {\n return this.itemList[this.itemList.length - 1];\n };\n LargeIconsView.prototype.navigateItem = function (item) {\n this.setFocus(item);\n };\n LargeIconsView.prototype.navigateDown = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards, this.perRow);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.navigateRight = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.getNextItem = function (li, isTowards, perRow) {\n if (isNOU(li)) {\n return this.getFocusedItem() || this.getActiveItem() || this.getFirstItem();\n }\n var index = this.itemList.indexOf(li);\n var nextItem;\n do {\n if (isTowards) {\n index = perRow ? index + perRow : index + 1;\n }\n else {\n index = perRow ? index - perRow : index - 1;\n }\n nextItem = this.itemList[index];\n if (this.parent.enableVirtualization && isNOU(nextItem)) {\n var marginValue = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-bottom'), 10);\n var scrollHeight = this.itemList[0].getBoundingClientRect().height + marginValue;\n this.element.firstElementChild.scrollTo(this.element.firstElementChild.scrollTop, this.element.firstElementChild.scrollTop + scrollHeight);\n }\n if (isNOU(nextItem)) {\n return li;\n }\n } while (!isVisible(nextItem));\n return nextItem;\n };\n LargeIconsView.prototype.setFocus = function (nextItem) {\n if (!isNOU(nextItem)) {\n var fileSelectionArgs = this.triggerSelection('select', nextItem);\n if (fileSelectionArgs.cancel !== true) {\n this.startItem = nextItem;\n this.clearSelect();\n this.addActive(nextItem);\n this.addFocus(nextItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', nextItem);\n }\n }\n };\n LargeIconsView.prototype.spaceKey = function (fItem) {\n if (!isNOU(fItem) && !fItem.classList.contains(CLS.ACTIVE)) {\n var fileSelectionArgs = this.triggerSelection('select', fItem);\n if (fileSelectionArgs.cancel !== true) {\n this.addActive(fItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', fItem);\n }\n }\n };\n LargeIconsView.prototype.ctrlAKey = function (firstItem, lastItem) {\n if (this.parent.allowMultiSelection && !isNOU(firstItem)) {\n this.startItem = firstItem;\n var eveArgs = { ctrlKey: true, shiftKey: true };\n var liParent = this.element.querySelector('.' + CLS.LIST_PARENT);\n var liScrPos = liParent.scrollTop;\n var getCurFocusedItem = this.getFocusedItem();\n this.doSelection(lastItem, eveArgs);\n liParent.scrollTop = liScrPos;\n if (!isNOU(getCurFocusedItem)) {\n this.addFocus(getCurFocusedItem);\n }\n }\n };\n LargeIconsView.prototype.csEndKey = function (lastItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(lastItem);\n }\n else if (!isNOU(lastItem)) {\n if (e.action === 'ctrlEnd') {\n this.addFocus(lastItem);\n }\n else {\n this.doSelection(lastItem, e);\n }\n }\n };\n LargeIconsView.prototype.csHomeKey = function (firstItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(firstItem);\n }\n else if (!isNOU(firstItem)) {\n if (e.action === 'ctrlHome') {\n this.addFocus(firstItem);\n }\n else {\n this.doSelection(firstItem, e);\n }\n }\n };\n LargeIconsView.prototype.csDownKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, true);\n }\n else {\n var dItem = this.getNextItem(fItem, true, this.perRow);\n if (!isNOU(dItem)) {\n if (e.action === 'ctrlDown') {\n this.addFocus(dItem);\n }\n else {\n this.doSelection(dItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csLeftKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, false);\n }\n else {\n var lItem = this.getNextItem(fItem, false);\n if (!isNOU(lItem)) {\n if (e.action === 'ctrlLeft') {\n this.addFocus(lItem);\n }\n else {\n this.doSelection(lItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csRightKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, true);\n }\n else {\n var rItem = this.getNextItem(fItem, true);\n if (!isNOU(rItem)) {\n if (e.action === 'ctrlRight') {\n this.addFocus(rItem);\n }\n else {\n this.doSelection(rItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csUpKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, false);\n }\n else {\n var uItem = this.getNextItem(fItem, false, this.perRow);\n if (!isNOU(uItem)) {\n if (e.action === 'ctrlUp') {\n this.addFocus(uItem);\n }\n else {\n this.doSelection(uItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.addActive = function (nextItem) {\n if (!isNOU(nextItem)) {\n if (!nextItem.classList.contains(CLS.ACTIVE)) {\n this.parent.selectedItems.push(this.getDataName(nextItem));\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n addClass([nextItem], [CLS.ACTIVE]);\n nextItem.setAttribute('aria-selected', 'true');\n this.checkState(nextItem, true);\n }\n this.parent.visitedItem = nextItem;\n }\n };\n LargeIconsView.prototype.removeActive = function (preItem) {\n if (!isNOU(preItem)) {\n removeClass([preItem], [CLS.ACTIVE]);\n if (this.parent.allowMultiSelection) {\n preItem.setAttribute('aria-selected', 'false');\n }\n else {\n preItem.removeAttribute('aria-selected');\n }\n this.checkState(preItem, false);\n var index = this.parent.selectedItems.indexOf(this.getDataName(preItem));\n if (index > -1) {\n this.parent.selectedItems.splice(index, 1);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n this.parent.visitedItem = null;\n }\n };\n LargeIconsView.prototype.getDataName = function (item) {\n var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.splitterResizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.getItemCount = function () {\n var perRow = 1;\n if (this.itemList) {\n for (var i = 0, len = this.itemList.length - 1; i < len; i++) {\n if (this.itemList[i].getBoundingClientRect().top === this.itemList[i + 1].getBoundingClientRect().top) {\n perRow++;\n }\n else {\n break;\n }\n }\n }\n this.perRow = perRow;\n };\n LargeIconsView.prototype.triggerSelection = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null\n : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1\n ? data\n : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n LargeIconsView.prototype.addSelection = function (data) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var newData = new DataManager(this.items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (newData.length > 0) {\n resultData = new DataManager(newData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n var index = this.items.indexOf(resultData[0]);\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[index], eveArgs);\n }\n };\n LargeIconsView.prototype.updateSelectedData = function () {\n var data = [];\n var items = selectAll('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n for (var i = 0; i < items.length; i++) {\n data[i] = this.getItemObject(items[i]);\n }\n this.parent.itemData = data;\n };\n LargeIconsView.prototype.onMethodCall = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n var action = getValue('action', args);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', args));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', args));\n break;\n case 'openFile':\n this.openFile(getValue('id', args));\n break;\n case 'renameFile':\n this.isInteraction = false;\n this.isInteracted = false;\n this.renameFile(getValue('id', args), getValue('newName', args));\n break;\n case 'createFolder':\n this.isInteraction = false;\n this.isInteracted = false;\n break;\n case 'clearSelection':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onClearAllInit();\n break;\n case 'selectAll':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onSelectAllInit();\n break;\n }\n };\n LargeIconsView.prototype.getItemsIndex = function (items) {\n var indexes = [];\n var isFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filterName = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !isFilter) {\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filterName, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n }\n else {\n for (var i = 0, len = this.items.length; i < len; i++) {\n var name_2 = getValue('filterPath', this.items[i]) + getValue('name', this.items[i]);\n if ((items.indexOf(name_2) !== -1) || (items.indexOf(getValue(filterName, this.items[i])) !== -1)) {\n indexes.push(i);\n }\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var indexes = this.getItemsIndex(ids);\n if (indexes.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < indexes.length; i++) {\n data[i] = this.items[indexes[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var index = this.getItemsIndex(ids);\n if (index.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < index.length; i++) {\n data[i] = this.items[index[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n this.doOpenAction(this.itemList[indexes[0]]);\n }\n };\n LargeIconsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n updateRenamingData(this.parent, this.items[indexes[0]]);\n if (isNOU(name)) {\n doRename(this.parent);\n }\n else {\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n rename(this.parent, this.parent.path, name);\n }\n }\n }\n };\n return LargeIconsView;\n}());\nexport { LargeIconsView };\n","import { EventHandler, closest, isNullOrUndefined, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, addClass, removeClass, remove, createElement } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { read } from '../common/operations';\nimport { getLocaleText, searchWordHandler } from '../common/utility';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * BreadCrumbBar module\n */\nvar BreadCrumbBar = /** @class */ (function () {\n /**\n * constructor for addressbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies parent element.\n * @private\n *\n */\n function BreadCrumbBar(parent) {\n this.addressPath = '';\n this.addressBarLink = '';\n this.searchTimer = null;\n this.searchWrapWidth = null;\n this.parent = parent;\n this.keyConfigs = {\n enter: 'enter'\n };\n this.render();\n }\n BreadCrumbBar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var value = e.newProp.searchSettings;\n switch (prop) {\n case 'searchSettings':\n if (!isNullOrUndefined(value.allowSearchOnTyping)) {\n this.searchEventBind(value.allowSearchOnTyping);\n }\n if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&\n !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&\n isNullOrUndefined(value.ignoreCase))) {\n searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);\n }\n break;\n }\n }\n };\n BreadCrumbBar.prototype.render = function () {\n this.addEventListener();\n };\n BreadCrumbBar.prototype.onPathChange = function () {\n var pathNames = this.parent.pathNames;\n var paths = this.parent.path.split('/');\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var addressbarLI = null;\n var pathNamesLen = pathNames.length;\n if (pathNames.length > 0) {\n var id = '';\n for (var i = 0; i < pathNamesLen; i++) {\n var addressATag = null;\n addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });\n for (var j = 0; j <= i; j++) {\n id = id + paths[j] + '/';\n }\n addressbarLI.setAttribute('data-utext', id);\n if (i !== 0) {\n var icon = createElement('span', { className: CLS.ICONS });\n addressbarLI.appendChild(icon);\n }\n if (pathNamesLen - i !== 1) {\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressbarLI.setAttribute('tabindex', '0');\n }\n else {\n addressATag = createElement('span', { className: CLS.LIST_TEXT });\n }\n id = '';\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.isMenuItemClicked = false;\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n };\n ContextMenu.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: false,\n element: args.element,\n event: args.event,\n isFocused: args.isFocused,\n fileDetails: [this.menuItemData],\n items: args.items,\n parentItem: args.parentItem,\n menuType: this.menuType\n };\n this.parent.trigger('menuClose', eventArgs, function (menuCloseArgs) {\n if (menuCloseArgs.cancel) {\n args.cancel = menuCloseArgs.cancel;\n return;\n }\n });\n this.menuTarget = null;\n if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule === 'navigationpane') {\n this.parent.pathId.pop();\n var parentKey = [];\n var itemKeys = Object.keys(this.parent.feParent);\n for (var _i = 0, itemKeys_1 = itemKeys; _i < itemKeys_1.length; _i++) {\n var item = itemKeys_1[_i];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var itemData = getValue(item, this.parent.feParent);\n if (this.parent.pathNames.indexOf(itemData.name) !== -1) {\n parentKey.push(itemData._fm_id);\n }\n }\n this.parent.pathId.push(parentKey[parentKey.length - 1]);\n this.parent.navigationpaneModule.treeObj.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n }\n this.isMenuItemClicked = false;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n var selected = false;\n var uid;\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest('div');\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('data-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n if (!isNOU(uid)) {\n this.parent.navigationpaneModule.treeObj.selectedNodes = [uid];\n }\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n else {\n var itemsToRemove = ['Delete', 'Rename', 'Cut', 'Copy'];\n for (var i = 0; i < this.disabledItems.length; i++) {\n var item = this.disabledItems[i];\n if (itemsToRemove.indexOf(item) !== -1) {\n this.disabledItems.splice(i, 1);\n i--;\n }\n }\n }\n /* istanbul ignore next */\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n else {\n var pasteIndex = this.disabledItems.indexOf('Paste');\n if (pasteIndex !== -1) {\n this.disabledItems.splice(pasteIndex, 1);\n }\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.parent.navigationpaneModule.treeObj.selectedNodes[0] + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n else {\n var indexToRemove = this.disabledItems.indexOf('Open');\n if (indexToRemove !== -1) {\n this.disabledItems.splice(indexToRemove, 1);\n }\n }\n if (this.parent.selectedItems.length === 0) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n }\n else if (this.parent.activeModule !== 'navigationpane') {\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename', 'Paste');\n }\n }\n };\n ContextMenu.prototype.setFileItem = function () {\n this.menuType = 'file';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.file.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (this.parent.selectedItems.length === 1) {\n var renameIndex = this.disabledItems.indexOf('Rename');\n if (renameIndex !== -1) {\n this.disabledItems.splice(renameIndex, 1);\n }\n }\n else {\n this.disabledItems.push('Rename');\n }\n };\n ContextMenu.prototype.setLayoutItem = function (target) {\n this.menuType = 'layout';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.layout.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (!this.parent.allowMultiSelection || ((this.parent.view === 'LargeIcons' &&\n (closest(target, '#' + this.parent.element.id + CLS.LARGEICON_ID).getElementsByClassName(CLS.EMPTY).length !== 0))\n || (this.parent.view === 'Details' &&\n (closest(target, '#' + this.parent.element.id + CLS.GRID_ID).getElementsByClassName(CLS.EMPTY).length !== 0)))) {\n this.disabledItems.push('SelectAll');\n }\n else {\n this.disabledItems = this.disabledItems.filter(function (item) { return item !== 'SelectAll'; });\n }\n if (this.parent.selectedNodes.length === 0) {\n if (this.disabledItems.indexOf('Paste') === -1) {\n this.disabledItems.push('Paste');\n }\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n else {\n return -1;\n }\n };\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n var args = { target: this.menuTarget };\n this.parent.notify(events.menuItemData, args);\n return this.parent.itemData[0];\n }\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onSelect = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var itemText = args.item.id.substr((this.parent.element.id + '_cm_').length);\n var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n _this.isMenuItemClicked = true;\n switch (itemText) {\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'paste':\n if (_this.menuType === 'folder') {\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n _this.parent.folderPath = _this.parent.path;\n }\n else {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'name':\n case 'size':\n case 'date':\n case 'ascending':\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.split(' ').join('').toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection, detach, selectAll, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem, closePopup } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.existingFileCount = 0;\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not\n _this.isMac = false;\n _this.dragSelectedItems = [];\n FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);\n return _this;\n }\n FileManager_1 = FileManager;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n FileManager.prototype.getModuleName = function () {\n return 'filemanager';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n FileManager.prototype.preRender = function () {\n if (isNOU(this.element.id) || this.element.id === '') {\n this.element.setAttribute('id', getUniqueID('filemanager'));\n }\n this.ensurePath();\n this.feParent = [];\n this.feFiles = [];\n setAttr(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.isDevice = Browser.isDevice;\n this.isMobile = this.checkMobile();\n if (this.isMobile) {\n this.setProperties({ navigationPaneSettings: { visible: false } }, true);\n }\n var ele = closest(this.element, '.e-bigger');\n this.isBigger = ele ? true : false;\n this.activeModule = (this.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n createSpinner({ target: this.element }, createElement);\n this.addWrapper();\n this.keyConfigs = {\n altN: 'alt+n',\n f5: 'f5',\n ctrlShift1: 'ctrl+shift+1',\n ctrlShift2: 'ctrl+shift+2',\n ctrlU: 'ctrl+u'\n };\n this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale);\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string} - returns the persisted data.\n * @hidden\n */\n FileManager.prototype.getPersistData = function () {\n var keyEntity = ['view', 'path', 'selectedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n FileManager.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'breadcrumbbar',\n args: [this]\n });\n modules.push({\n member: 'largeiconsview',\n args: [this]\n });\n if (this.toolbarSettings.visible) {\n modules.push({\n member: 'toolbar',\n args: [this],\n name: 'Toolbar'\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this],\n name: 'NavigationPane'\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this],\n name: 'DetailsView'\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this],\n name: 'ContextMenu'\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this],\n name: 'Virtualization'\n });\n }\n return modules;\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n FileManager.prototype.render = function () {\n this.initialize();\n var slItems = isNOU(this.selectedItems) ? [] :\n this.allowMultiSelection ? this.selectedItems : this.selectedItems.slice(this.selectedItems.length - 1);\n this.setProperties({ selectedItems: slItems }, true);\n this.fileView = this.view;\n this.isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n this.setRtl(this.enableRtl);\n this.addEventListeners();\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n if (this.fileView === 'Details') {\n this.largeiconsviewModule.element.classList.add(CLS.DISPLAY_NONE);\n }\n this.adjustHeight();\n if (isNOU(this.navigationpaneModule)) {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n this.wireEvents();\n this.renderComplete();\n };\n FileManager.prototype.ensurePath = function () {\n var currentPath = this.path;\n if (isNOU(currentPath)) {\n currentPath = '/';\n }\n if (currentPath.lastIndexOf('/') !== (currentPath.length - 1)) {\n currentPath = currentPath + '/';\n }\n this.originalPath = currentPath;\n var paths = currentPath.split('/');\n this.setProperties({ path: paths[0] + '/' }, true);\n this.pathNames = [];\n this.pathId = ['fe_tree'];\n this.itemData = [];\n };\n FileManager.prototype.initialize = function () {\n if (this.isMobile) {\n addClass([this.element], CLS.MOBILE);\n }\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n this.addCssClass(null, this.cssClass);\n this.renderFileUpload();\n };\n FileManager.prototype.addWrapper = function () {\n var headerWrap = this.createElement('div', { id: this.element.id + CLS.TOOLBAR_ID });\n this.element.appendChild(headerWrap);\n var layoutWrap = this.createElement('div', {\n id: this.element.id + CLS.LAYOUT_ID, className: CLS.LAYOUT\n });\n this.element.appendChild(layoutWrap);\n var navigationWrap = this.createElement('div', {\n id: this.element.id + CLS.NAVIGATION_ID, className: CLS.NAVIGATION\n });\n var treeWrap = this.createElement('div', {\n id: this.element.id + CLS.TREE_ID\n });\n navigationWrap.appendChild(treeWrap);\n var contentWrap = this.createElement('div', {\n id: this.element.id + CLS.CONTENT_ID, className: CLS.LAYOUT_CONTENT\n });\n this.breadCrumbBarNavigation = this.createElement('div', {\n id: this.element.id + CLS.BREADCRUMBBAR_ID,\n className: CLS.BREADCRUMBS\n });\n contentWrap.appendChild(this.breadCrumbBarNavigation);\n var gridWrap = this.createElement('div', {\n id: this.element.id + CLS.GRID_ID\n });\n contentWrap.appendChild(gridWrap);\n var largeiconWrap = this.createElement('div', {\n id: this.element.id + CLS.LARGEICON_ID,\n className: CLS.LARGE_ICONS, attrs: { 'role': 'group' }\n });\n contentWrap.appendChild(largeiconWrap);\n var overlay = this.createElement('span', { className: CLS.OVERLAY });\n contentWrap.appendChild(overlay);\n var paneSettings;\n if (!this.enableRtl) {\n layoutWrap.appendChild(navigationWrap);\n layoutWrap.appendChild(contentWrap);\n paneSettings = [\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n },\n { size: '75%', min: '270px' }\n ];\n }\n else {\n layoutWrap.appendChild(contentWrap);\n layoutWrap.appendChild(navigationWrap);\n paneSettings = [\n { size: '75%', min: '270px' },\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n }\n ];\n }\n this.splitterObj = new Splitter({\n paneSettings: paneSettings,\n width: '100%',\n enableRtl: false,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n resizing: this.splitterResize.bind(this)\n });\n this.splitterObj.isStringTemplate = true;\n this.splitterObj.appendTo(layoutWrap);\n var dialogWrap = this.createElement('div', { id: this.element.id + CLS.DIALOG_ID });\n this.element.appendChild(dialogWrap);\n var menuWrap = this.createElement('ul', { id: this.element.id + CLS.CONTEXT_MENU_ID });\n this.element.appendChild(menuWrap);\n var dialogImgWrap = this.createElement('div', { id: this.element.id + CLS.IMG_DIALOG_ID });\n this.element.appendChild(dialogImgWrap);\n var extnDialogWrap = this.createElement('div', { id: this.element.id + CLS.EXTN_DIALOG_ID });\n this.element.appendChild(extnDialogWrap);\n var uploadDialogWrap = this.createElement('div', { id: this.element.id + CLS.UPLOAD_DIALOG_ID });\n this.element.appendChild(uploadDialogWrap);\n };\n FileManager.prototype.adjustHeight = function () {\n var toolbar = select('#' + this.element.id + CLS.TOOLBAR_ID, this.element);\n var toolBarHeight = toolbar ? toolbar.offsetHeight : 0;\n if (this.splitterObj) {\n this.splitterObj.height = (this.element.clientHeight - toolBarHeight).toString();\n this.splitterObj.dataBind();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.splitterResize = function () {\n this.notify(events.splitterResize, {});\n };\n FileManager.prototype.splitterAdjust = function () {\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n if (this.navigationPaneSettings.visible) {\n this.splitterObj.expand(this.enableRtl ? 1 : 0);\n bar.classList.remove(CLS.DISPLAY_NONE);\n }\n else {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n };\n FileManager.prototype.addCssClass = function (oldOne, newOne) {\n if (!isNOU(oldOne) && oldOne !== '') {\n removeClass([this.element], oldOne.split(' '));\n }\n if (!isNOU(newOne) && newOne !== '') {\n addClass([this.element], newOne.split(' '));\n }\n };\n FileManager.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n FileManager.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n FileManager.prototype.onContextMenu = function (e) {\n e.preventDefault();\n };\n FileManager.prototype.checkMobile = function () {\n return (/iphone|ipod|android|blackberry|opera|mini|windows\\sce|palm|smartphone|iemobile/i.test(Browser.userAgent.toLowerCase())\n && /mobile/i.test(Browser.userAgent.toLowerCase()));\n };\n FileManager.prototype.renderFileUpload = function () {\n var id = this.element.id + CLS.UPLOAD_ID;\n var uploadEle = this.createElement('input', { id: id, attrs: { name: 'uploadFiles', type: 'file' } });\n this.element.appendChild(uploadEle);\n this.uploadDialogObj = new Dialog({\n header: getLocaleText(this, 'Header-Upload'),\n content: uploadEle,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: false,\n isModal: true,\n width: '350px',\n target: this.popupTarget ? this.popupTarget : '#' + this.element.id,\n cssClass: getCssClass(this, this.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: this.locale,\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n enableRtl: this.enableRtl,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n open: this.onOpen.bind(this),\n close: this.onClose.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n this.uploadDialogObj.appendTo('#' + this.element.id + CLS.UPLOAD_DIALOG_ID);\n this.renderUploadBox();\n };\n FileManager.prototype.renderUploadBox = function () {\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n this.uploadObj = new Uploader({\n dropArea: select('#' + this.element.id + CLS.CONTENT_ID, this.element),\n asyncSettings: {\n saveUrl: uploadUrl,\n removeUrl: uploadUrl\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n removing: this.onRemoving.bind(this),\n canceling: this.onCancel.bind(this),\n clearing: this.onClearing.bind(this),\n selected: this.onSelected.bind(this),\n success: this.onUploadSuccess.bind(this),\n failure: this.onUploadFailure.bind(this),\n autoUpload: this.uploadSettings.autoUpload,\n minFileSize: this.uploadSettings.minFileSize,\n maxFileSize: this.uploadSettings.maxFileSize,\n allowedExtensions: this.uploadSettings.allowedExtensions,\n directoryUpload: this.uploadSettings.directoryUpload,\n fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadSuccess = function (files) {\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploadFailure = function (files) {\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') !== -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireSelectOnDragEvent = function (isBind) {\n if (isNOU(this.view)) {\n return;\n }\n if (isBind) {\n this.viewElem = this.view === 'LargeIcons' ? this.largeiconsviewModule.element : this.element.querySelector('.e-gridcontent');\n }\n if (!this.viewElem) {\n return;\n }\n if (isBind) {\n if (this.allowMultiSelection) {\n EventHandler.add(this.viewElem, 'mousedown', this.onDragStart, this);\n this.on(events.layoutChange, this.onLayoutChange, this);\n this.on(events.selectionChanged, this.onLayoutChange, this);\n }\n }\n else {\n EventHandler.remove(this.viewElem, 'mousedown', this.onDragStart);\n this.off(events.layoutChange, this.onLayoutChange);\n this.off(events.selectionChanged, this.onLayoutChange);\n }\n };\n FileManager.prototype.wireEvents = function () {\n if (this.enableRangeSelection) {\n this.wireSelectOnDragEvent(true);\n }\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n FileManager.prototype.unWireEvents = function () {\n this.wireSelectOnDragEvent(false);\n EventHandler.remove(window, 'resize', this.resizeHandler);\n this.keyboardModule.destroy();\n };\n FileManager.prototype.onDragStart = function (event) {\n if (this.viewElem) {\n if (this.allowDragAndDrop) {\n var targetElement = closest(event.target, this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-fe-text');\n if (targetElement) {\n return;\n }\n }\n event.preventDefault();\n this.dragX = event.pageX;\n this.dragY = event.pageY;\n if (!this.dragSelectElement) {\n this.dragSelectElement = createElement('div', {\n id: this.element.id + '_drag',\n className: 'e-filemanager e-drag-select',\n styles: 'left: ' + this.dragX + 'px;top: ' + this.dragY + 'px;'\n });\n document.body.append(this.dragSelectElement);\n }\n EventHandler.add(document, 'mouseup', this.onDragStop, this);\n EventHandler.add(this.viewElem, 'mousemove', this.onDrag, this);\n EventHandler.add(this.dragSelectElement, 'mousemove', this.onDrag, this);\n }\n };\n FileManager.prototype.onDrag = function (event) {\n event.stopPropagation();\n if (this.dragSelectElement) {\n var diffX = event.pageX - this.dragX;\n var diffY = event.pageY - this.dragY;\n setStyleAttribute(this.dragSelectElement, {\n 'left': diffX < 0 ? this.dragX + diffX + 'px' : this.dragX + 'px', 'top': diffY < 0 ? this.dragY + diffY + 'px' : this.dragY + 'px',\n 'height': Math.abs(diffY) + 'px', 'width': Math.abs(diffX) + 'px'\n });\n this.selectItems();\n }\n else {\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n };\n FileManager.prototype.onDragStop = function () {\n if (this.viewElem) {\n EventHandler.remove(document, 'mouseup', this.onDragStop);\n EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);\n }\n if (this.dragSelectElement) {\n EventHandler.remove(this.dragSelectElement, 'mousemove', this.onDrag);\n if (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0) {\n this.setProperties({ selectedItems: this.dragSelectedItems });\n }\n this.dragSelectedItems = [];\n detach(this.dragSelectElement);\n this.dragSelectElement = null;\n }\n };\n FileManager.prototype.selectItems = function () {\n this.dragSelectedItems = [];\n var dragRect = this.dragSelectElement.getBoundingClientRect();\n var allItems = selectAll(this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-row', this.viewElem);\n removeClass(selectAll('.e-active', this.viewElem), ['e-active', 'e-focus']);\n removeClass(selectAll('.e-check', this.viewElem), ['e-check']);\n for (var _i = 0, allItems_1 = allItems; _i < allItems_1.length; _i++) {\n var item = allItems_1[_i];\n var itemRect = item.getBoundingClientRect();\n if (!(dragRect.right < itemRect.left || dragRect.left > itemRect.right\n || dragRect.bottom < itemRect.top || dragRect.top > itemRect.bottom)\n && (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0)) {\n if (this.viewElem.classList.contains('e-large-icons')) {\n item.classList.add('e-active');\n this.dragSelectedItems.push(item.getAttribute('title'));\n }\n else {\n addClass(selectAll('.e-rowcell', item), ['e-active']);\n this.dragSelectedItems.push(item.querySelector('.e-drag-text').textContent);\n }\n item.querySelector('.e-frame').classList.add('e-check');\n }\n }\n };\n FileManager.prototype.onLayoutChange = function () {\n if (this.enableRangeSelection) {\n this.unWireEvents();\n this.wireEvents();\n }\n };\n FileManager.prototype.setPath = function () {\n this.setProperties({ selectedItems: [] }, true);\n this.ensurePath();\n this.notify(events.clearPathInit, { selectedNode: this.pathId[0] });\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {FileManager} newProp\n * @param {FileManager} oldProp\n * @returns void\n * @private\n */\n /* istanbul ignore next */\n FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var height;\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 '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 this.refresh();\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n this.refresh();\n break;\n case 'height':\n height = !isNOU(newProp.height) ? formatUnit(newProp.height) : newProp.height;\n setAttr(this.element, { 'height': height });\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'locale':\n if (!isNOU(newProp.enableRtl)) {\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n }\n this.localeSetModelOption(newProp);\n break;\n case 'navigationPaneSettings':\n this.splitterAdjust();\n this.notify(events.modelChanged, { module: 'navigationpane', newProp: newProp, oldProp: oldProp });\n break;\n case 'path':\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n refresh(this);\n this.notify(events.sortByChange, {});\n if (this.view === 'Details') {\n this.notify(events.sortColumn, {});\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 this.refresh();\n break;\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n this.viewElem = null;\n this.dragSelectElement = null;\n this.dragSelectedItems = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Specifies the method that must be invoked to traverse the path backwards in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.traverseBackward = function () {\n if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {\n this.pathId.pop();\n this.pathNames.pop();\n var newPath = this.pathNames.slice(1).join('/');\n newPath = newPath === '' ? '/' : '/' + newPath + '/';\n this.setProperties({ path: newPath }, true);\n read(this, events.pathChanged, this.path);\n var treeNodeId = this.pathId[this.pathId.length - 1];\n this.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the method which must be invoked to programmatically close the dialog popup in the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.closeDialog = function () {\n closePopup(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property([])\n ], FileManager.prototype, \"fileSystemData\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"sortComparer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableRangeSelection\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeFolderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"folderCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDelete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"delete\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeRename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"rename\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeMove\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"move\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"search\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n var _this = this;\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan_1 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan_1 = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>',\n beforeItemRender: function (args) {\n var tickIcon = args.item.iconCss;\n var viewText = args.item.text === getLocaleText(_this.parent, 'View-LargeIcons');\n var iconClass = tickIcon ? ' e-menu-icon ' + tickIcon : '';\n args.element.innerHTML = '<span class=\"' + iconClass + '\"></span>' + (viewText ? largeIconSpan_1 : gridSpan_1) + args.item.text;\n var span = args.element.firstChild;\n if (span && span.className === '') {\n args.element.removeChild(span);\n }\n }\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = Object.assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n if (this.itemList.length !== 0 && this.largeIconInstance.element.querySelector('.' + CLS.EMPTY)) {\n this.largeIconInstance.element.removeChild(this.largeIconInstance.element.querySelector('.' + CLS.EMPTY));\n }\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n *\n * @returns {void}\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add('e-virtual-top');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add('e-virtual-bottom');\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n *\n * @param {number} dataSourceLength The length of the data source.\n * @returns {number} The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount =\n Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) /\n (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount *\n (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength) {\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 this.expandTree = false;\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop && isNOU(this.dragObj)) {\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n var directories = getDirectories(files);\n var targetDirectory = this.getTreeData(target);\n if (directories.length > 0 && targetDirectory.length > 0 &&\n (directories[0].filterPath == null ||\n isNOU(targetDirectory[0])\n && targetDirectory[0].filterPath == null\n || directories[0].filterPath !==\n targetDirectory[0].filterPath)) {\n var length_1 = 0;\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line camelcase\n folders[parseInt(length_1.toString(), 10)]._fm_icon = 'e-fe-folder';\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n var element = select('[data-uid=\"' + target + '\"]', this.treeObj.element);\n var childElements = select('ul', element);\n if (isNOU(childElements)) {\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick &&\n !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.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.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.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], !this.expandTree);\n }\n this.expandNodeTarget = '';\n }\n this.expandTree = false;\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.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.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.expandTree = this.treeObj.expandedNodes.indexOf(this.treeObj.selectedNodes[0]) !== -1;\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\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, '/');\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.selectedNodes = [e.selectedNode];\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (isFileSystemData(this.parent) && (this.parent.path === this.parent.dropPath || this.parent.targetModule === 'navigationpane')) {\n return;\n }\n if (this.parent.hasId) {\n this.parent.isDropEnd = !this.parent.isPasteError;\n readDropPath(this.parent);\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n var obj = this.parent.isDragDrop || isFileSystemData(this.parent) ? this.parent.dragData : this.parent.actionRecords;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n NavigationPane.prototype.getTreeData = function (args) {\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var 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 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 if (this.parent.isMobile) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick'\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n load: function () {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent['portals'] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent['portals'] = this.parent['portals'].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent['portals']);\n this.parent['renderReactTemplates']();\n };\n /**\n * Gets the grid height.\n *\n * @returns {number} - The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n var enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return \"<div class=\\\"e-fe-text\\\">\" + name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div><span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n var _loop_1 = function (i, len) {\n columns[i].headerText = getLocaleText(this_1.parent, columns[i].headerText);\n if (columns[i].field === 'name' && !isNOU(columns[i].template) && !(typeof columns[i].template === 'function')) {\n var template_1 = columns[i].template;\n columns[i].template = initializeCSPTemplate(function (data) {\n var name = enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(data.name) : data.name;\n return template_1.replace(/\\${name}/g, name);\n });\n }\n };\n var this_1 = this;\n for (var i = 0, len = columns.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return '<span class=\\'e-fe-icon e-fe-folder\\'></span>';\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n if (this.parent.enableRangeSelection) {\n var HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };\n columns.push(HiddenName);\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var text = getValue('name', args.data);\n var textEle = args.row.querySelector('[title= \"' + text + '\"]');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n var _this = this;\n showSpinner(this.parent.element);\n var nameColumn = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === _this.parent.sortBy; });\n if (nameColumn && !('sortComparer' in nameColumn)) {\n var items = getSortedData(this.parent, (this.parent.enableVirtualization)\n ? args.result\n : this.gridObj.dataSource);\n args.result = items;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) ||\n ((this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization &&\n this.element.querySelector('.e-content').scrollTop === 0))) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.parent.createdItem) {\n this.selectRecords([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n }\n if (this.parent.layoutSelectedItems.length) {\n this.selectRecords(this.parent.layoutSelectedItems);\n }\n if (this.parent.renamedItem) {\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && !this.parent.hasId && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n DetailsView.prototype.addSelection = function (data) {\n var items = this.gridObj.getCurrentViewRecords();\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n var pathField = this.parent.detailsViewSettings.columns.find(function (column) { return column.field === 'filterPath'; });\n if ((this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) ||\n (!isNullOrUndefined(pathField) && !isNullOrUndefined(pathField.hideAtMedia) && pathField.hideAtMedia !== '')) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imgUrl);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath')) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = this.parent.hasId ? this.gridObj.getRowInfo(dragLi).rowData.id : dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 180px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 180px');\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (this.gridObj) {\n if (this.parent.allowDragAndDrop && isNullOrUndefined(this.dragObj)) {\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n this.dragObj = null;\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n var info = null;\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath ||\n this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n if (!this.isMultiSelect) {\n this.isMultiSelect = true;\n if ((args.isShiftPressed || args.isCtrlPressed) && !this.parent.allowMultiSelection && (args.target && args.target.parentElement && !args.target.parentElement.classList.contains('e-checkbox-wrapper'))) {\n args.cancel = true;\n var rowIndex = (args && args.rowIndexes)\n ? args.rowIndexes[args.rowIndexes.length - 1]\n : args.rowIndex;\n this.gridObj.selectRow(rowIndex);\n }\n this.isMultiSelect = false;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n this.gridObj.getRowByIndex(args.rowIndex).removeAttribute('tabindex');\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n this.gridObj.getRowByIndex(lastItemIndex).querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n _this.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (_this.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (_this.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', _this.parent.allowMultiSelection, _this.gridObj.selectionModule);\n addClass([_this.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = _this.gridObj.getRows().indexOf(row);\n _this.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.onBlur = function (e) {\n if ((e.relatedTarget !== null && closest(e.relatedTarget, '.e-grid') !== e.relatedTarget)) {\n return;\n }\n if (!isNOU(this.gridObj.element)) {\n var thElements = this.gridObj.element.querySelectorAll('th');\n for (var i = 0; i < thElements.length; i++) {\n if (thElements[i].classList.contains('e-focus')) {\n this.addFocus(null);\n }\n }\n }\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('data-rowindex'), 10) : null;\n };\n /* istanbul ignore next */\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1 && this.gridObj.allowSorting === true) {\n if (!e.target.classList.contains('e-fe-grid-icon')) {\n var direction = !e.target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n var currentField = this.gridObj.getColumnByUid(e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid')).field;\n this.gridObj.sortColumn(currentField, direction);\n if (!isNOU(this.getFocusedItem().nextSibling)) {\n this.getFocusedItem().nextSibling.setAttribute('tabindex', '0');\n }\n }\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else {\n this.addHeaderFocus(e);\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n case 'back':\n this.parent.traverseBackward();\n break;\n }\n };\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function (e) {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus;\n if (!isNOU(e.target) && e.target.classList.contains('e-defaultcursor')) {\n this.addFocus(0);\n nameFocus = e.target.nextElementSibling;\n }\n else if (!isNOU(this.gridObj.element.querySelector('.e-focus')) && (this.gridObj.element.querySelector('.e-focus').tagName === 'TH')) {\n nameFocus = this.gridObj.element.querySelector('.e-focus').nextElementSibling;\n this.addFocus(0);\n }\n else {\n nameFocus = select('th.e-fe-grid-icon', this.element);\n }\n if (!isNOU(nameFocus)) {\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n DetailsView.prototype.getRecords = function (nodes) {\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["sortComparer","reference","comparer","referenceIsFile","test","comparerIsFile","referenceParts","comparerParts","replace","_","$1","$2","push","Infinity","length","referencePart","shift","comparerPart","comparisonResult","localeCompare","updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","ids","names","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","parseInt","toString","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","isFileSystemData","itemData","fileSystemData","read","events.layoutChange","searchSettings","filterType","filteredData","filter","obj","parentId","DataManager","executeLocal","Query","where","ignoreCase","searchValue","toLowerCase","Search","events.search","showHiddenItems","getPathObject","caseSensitive","hiddenItems","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","eventArgs_1","fileDetails","imageUrl","trigger","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","eventArgs","Date","getTime","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","isNullOrUndefined","group","sortBy","lists","getObject","currFiles","feFiles","createEmptyElement","top","layoutElement","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","localeString","dateFormat","createdDate","modifiedDate","formatDate","format","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","includes","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","name_1","dragData","srcData","dragNodes","tempTarget","dropHandler","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","navigationpaneModule","treeObj","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","uploadObj","dropArea","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","scrollHandler","scrollParent","nodeClass","screenY","clientY","position","elementData","getBoundingClientRect","clientHeight","scrollBy","draggingHandler","canDrop","setTimeout","events.dragging","parentElement","y","firstElementChild","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","closePopup","dialogObj","hide","getAccessDetails","isPathPermision","accessMessage","undefined","copyOrMovePermission","responseData","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","isFileExists","some","findIndexById","findIndex","String","filterById","filterByParent","createNewItem","isCopy","newItem","prototype","hasOwnProperty","call","currentDate","assign","dateCreated","dateModified","hasChild","getUid","size","type","createErrorObject","triggerFolderCreation","createEventArgs","folderName","parentFolder","data_1","newObject","triggerDeleteOperation","deleteEventArgs","forEach","index","splice","subItem","triggerRenameOperation","renameEventArgs","triggerMoveOrCopyOperation","moveEventArgs","itemPermission","pathPermission","file_1","folderSubItems_1","existingFileCount","copyFolderItems","getTargetFiles","currItem","subItems","parentID","fileData","pathArray","triggerSearchOperation","searchEventArgs","searchResults","searchText","triggerClientEvents","fn","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","idValue","isFileOperation","map","isMultipleFiles","itemNames","totalSize","getSize","reduce","accumulator","currentObject","location","multipleFiles","created","modified","performReadOperation","Ajax","result_1","triggerAjaxFailure","parse","send","toFixed","events.afterRequest","rootAliasName","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","copiedItems","events.selectionChanged","pop","handleCatchError","visible","nextElementSibling","createdItem","events.createEnd","renamedItem","Array","isArray","events.renameEndParent","renameText","events.pathChanged","events.renameEnd","moveorcopyEventArgs","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","useFormPost","responseType","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","contentDisposition_1","fileName_1","Fetch","onLoad","e","headers","get","filenameMatch","extractedFilename","blob","blobUrl","URL","createObjectURL","link","href","body","status","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","replaceItems","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","placeholder","Input","properties","formattedString","strArr","onDeleteSubmit","CLS.VALUE","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","template","customAttributes","class","initializeCSPTemplate","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","DataUtil","sort","CLS.DISPLAY_NONE","enableVirtualization","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","slice","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","x","z","ondragstart","_this","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","selected","showThumbnail","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","clickObj","Touch","tap","eve","isDevice","tapEvent","doTapAction","originalEvent","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","cList","addActive","CLS.CHECK","triggerSelection","startIndex","endIndex","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","traverseBackward","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","getPropertyValue","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","isMenuItemClicked","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","isFocused","parentItem","menuType","menuCloseArgs","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","itemsToRemove","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","indexToRemove","renameIndex","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","dragSelectedItems","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","adjustHeight","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","splitterAdjust","bar","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","uploading","onUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","uploadSettings","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","removeEventListeners","wireSelectOnDragEvent","isBind","viewElem","onDragStart","enableRangeSelection","dragX","pageX","dragY","pageY","dragSelectElement","styles","append","onDragStop","onDrag","stopPropagation","diffX","diffY","setStyleAttribute","Math","abs","dragRect","allItems_1","itemRect","right","bottom","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","closeDialog","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","tickIcon","viewText","iconClass","firstChild","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","mergedItems","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getTreeData","getDragPath","getDropPath","nodeData","addChild","prevent","directories","targetDirectory","_fm_icon","childElements","addNodes","selecEventArgs","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","itemname","checkDropPath","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","isMultiSelect","Grid","Resize","Sort","VirtualScroll","checkNameWidth","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","enablePersistence","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","reactTemplateRender","emptyArgs","pane","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","HiddenName","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","nameColumn","find","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","pathField","hideAtMedia","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","isShiftPressed","isCtrlPressed","rowIndexes","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","relatedTarget","thElements","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","currentField","getColumnByUid","nextSibling","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tagName","check","getRecords","hasFilter","name_4","dRecords","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}