@syncfusion/ej2-filemanager 25.1.39 → 25.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/ej2-filemanager.min.js +2 -2
- package/dist/ej2-filemanager.umd.min.js +2 -2
- package/dist/ej2-filemanager.umd.min.js.map +1 -1
- package/dist/es6/ej2-filemanager.es2015.js +21 -9
- package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
- package/dist/es6/ej2-filemanager.es5.js +21 -9
- package/dist/es6/ej2-filemanager.es5.js.map +1 -1
- package/dist/global/ej2-filemanager.min.js +2 -2
- package/dist/global/ej2-filemanager.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +15 -15
- package/src/file-manager/common/utility.js +4 -4
- package/src/file-manager/layout/details-view.js +1 -2
- package/src/file-manager/models/column-model.d.ts +1 -0
- package/src/file-manager/models/column.d.ts +1 -0
- package/src/file-manager/models/details-view-settings.js +1 -1
- package/src/file-manager/pop-up/context-menu.js +15 -2
@@ -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 } 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 if (!referenceIsFile && comparerIsFile)\n return -1;\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 var comparisonResult = referencePart[0] - comparerPart[0] ||\n referencePart[1].localeCompare(comparerPart[1]);\n if (comparisonResult)\n return comparisonResult;\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 */\n// eslint-disable-next-line\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 = hasId ? '' : '/';\n var len = matched.length - (hasId ? 1 : 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 = parent.hasId ? '' : '/';\n var i = parent.hasId ? 0 : 1;\n for (i; i < parent.pathId.length; i++) {\n // eslint-disable-next-line\n var data = getValue(parent.pathId[i], 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 (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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function getImageUrl(parent, item) {\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var imgUrl;\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None') {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function getObject(parent, key, value) {\n // eslint-disable-next-line\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var query = new Query().where(key, 'equal', value);\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 // eslint-disable-next-line\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\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 * @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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = getObject(parent, key, folders[i]);\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 */\n// eslint-disable-next-line\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, 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 // eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 srcData = 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 ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return parent.hasId ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return 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 */\n// eslint-disable-next-line\nexport function getDuplicateData(parent, name) {\n // eslint-disable-next-line\n var data = null;\n // eslint-disable-next-line\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\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 // eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasReadAccess(data) {\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasEditAccess(data) {\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasContentAccess(data) {\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasUploadAccess(data) {\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasDownloadAccess(data) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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","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 } from '../common/utility';\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n // eslint-disable-next-line\n var filterData;\n // eslint-disable-next-line\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 // eslint-disable-next-line\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, \n// eslint-disable-next-line\nrenameItems, actionRecords) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Function for createAjax in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {Function} fn - specifies the fn.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the target path.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\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}\nfunction createAjax(\n// eslint-disable-next-line\nparent, data, fn, event, operation, targetPath) {\n // eslint-disable-next-line\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 parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\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 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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n 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 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 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(\n// eslint-disable-next-line\nparent, 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 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 (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 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 = result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\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 * @param {string} path - specifies the path\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result, path) {\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 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 read(parent, events.pathChanged, parent.path === '/' ? parent.path : getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/') + parent.renamedItem.name + '/');\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 }\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/* 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 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/**\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 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/**\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 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/**\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(\n// eslint:disable-next-line\nparent, event, path, searchString, showHiddenItems, caseSensitive) {\n // eslint-disable-next-line\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 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/* 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 // eslint-disable-next-line\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 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 }\n });\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 * @param {string[]} replaceItems - specifies the replacement.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details, replaceItems) {\n var options = getOptions(parent, text, e, details, replaceItems);\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 * @param {string[]} replaceItems - specifies the replacement items.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details, replaceItems) {\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 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 (e) {\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 (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n var index_1;\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index_1 = val.name.indexOf('.') + 1;\n return (index_1 === 0 && (!val.isFile)) ? 'Folder' : ((index_1 !== 0) ? val.name.substr(index_1).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] == undefined) {\n strArr = details.name.split(',').map(function (val) {\n index_1 = val.indexOf('.') + 1;\n return (index_1 === 0) ? 'Folder' : val.substr(index_1).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 (e) {\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/* istanbul ignore next */\n/**\n *\n * @param {SelectedEventArgs} data - specifies the data.\n * @returns {HTMLElement} - returns the HTML element.\n * @private\n */\nfunction getFilesName(data) {\n var parent = createElement('div', { id: 'uploadDialog' });\n var ulElement = createElement('ul');\n var filesData = data.isModified ? data.modifiedFilesData : data.filesData;\n for (var fileCount = 0; fileCount < filesData.length; fileCount++) {\n var liElement = createElement('li', { className: 'dialogFiles' });\n liElement.innerHTML = filesData[fileCount].name;\n ulElement.appendChild(liElement);\n }\n parent.appendChild(ulElement);\n var errorTag = createElement('div', { className: 'e-fe-error' });\n parent.appendChild(errorTag);\n return parent;\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, isPrimaryKey: true,\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 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 if (!this.element.style.height) {\n this.adjustHeight();\n }\n this.parent.virtualizationModule.setUIVirtualization();\n }\n // eslint-disable-next-line\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.adjustHeight();\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, xObj, yObj) {\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 ;\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 // eslint-disable-next-line\n this.parent.dragData.push(this.getItemObject(activeEle[i]));\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 // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n // eslint-disable-next-line\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.adjustHeight = function () {\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 this.element.style.height = (pane.offsetHeight - bar.offsetHeight) + 'px';\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 // eslint-disable-next-line\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n // eslint-disable-next-line\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 this.parent.renamedItem = null;\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 this.adjustHeight();\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 // eslint-disable-next-line\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 || this.parent.path === getDirectoryPath(this.parent, args)) {\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 'height':\n this.adjustHeight();\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 if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n eve.originalEvent.preventDefault();\n if (proxy_1.parent.isDevice) {\n proxy_1.tapCount = eve.tapCount;\n proxy_1.tapEvent = eve;\n setTimeout(function () {\n if (proxy_1.tapCount > 0) {\n proxy_1.doTapAction(proxy_1.tapEvent);\n }\n proxy_1.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n proxy_1.dblClickHandler(eve);\n }\n else {\n proxy_1.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n proxy_1.multiSelect = proxy_1.parent.allowMultiSelection ? true : false;\n if (proxy_1.parent.allowMultiSelection) {\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n proxy_1.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.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 // eslint-disable-next-line\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 // eslint:disable-next-line\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 // eslint:disable-next-line\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 }\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 if (!isNOU(this.listObj)) {\n this.adjustHeight();\n }\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 // eslint-disable-next-line\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 = {\n action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n // eslint-disable-next-line\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 ? data : 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 // eslint-disable-next-line\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 () {\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 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 // eslint-disable-next-line\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 // eslint:disable-next-line\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 // eslint:disable-next-line\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 // eslint:disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 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 /* istanbul ignore next */\n // eslint:disable-next-line\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 this.disabledItems.push('Paste');\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 }\n else if (this.parent.selectedItems.length !== 1 && this.parent.activeModule !== 'navigationpane') {\n this.disabledItems.push('Rename', 'Paste');\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 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 if (this.parent.selectedNodes.length === 0) {\n this.disabledItems.push('Paste');\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 // eslint-disable-next-line\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint:disable-next-line\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 === 'largeiconsview') || (_this.parent.activeModule === 'detailsview')) {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n else {\n _this.parent.folderPath = '';\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 /* istanbul ignore next */\n case 'name':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'size':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'date':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'ascending':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\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 // eslint:disable-next-line\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\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 */\n// eslint-disable-next-line\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 } 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 } 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 // eslint-disable-next-line\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n // eslint-disable-next-line\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\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 // eslint-disable-next-line\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 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 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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n FileManager.prototype.onUploadFailure = function (files) {\n // eslint-disable-next-line\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.wireEvents = function () {\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 EventHandler.remove(window, 'resize', this.resizeHandler);\n this.keyboardModule.destroy();\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 // eslint:disable-next-line\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 '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 }\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 };\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 * 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 // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(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(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 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, \"destroyed\", 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, \"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","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\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 // eslint-disable-next-line\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 = __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 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 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 * @param dataSourceLength The length of the data source.\n * @returns 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 = Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) / (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount * (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 * @param destroy - Set `true` to unwire the scroll event.\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 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.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 * @param startingHeight The starting height from which to calculate the scroll position.\n * @returns The current scroll position.\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 * @param listDiff The number of rows to update.\n * @param isScrollingDown If set to true, the scroll direction is downward.\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 * @param isScrollingDown If set to true, the scroll direction is downward.\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 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 } 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 // eslint-disable-next-line\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n // eslint-disable-next-line\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) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\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 }\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n // eslint-disable-next-line\n var directories = getDirectories(files);\n if (directories.length > 0 &&\n (directories[0].filterPath == null || this.getTreeData(target)[0].filterPath == null || directories[0].filterPath !== this.getTreeData(target)[0].filterPath)) {\n var length_1 = 0;\n // eslint-disable-next-line\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line\n folders[length_1]._fm_icon = 'e-fe-folder';\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 && !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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 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 this.isNodeExpandCalled = true;\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = this.treeObj.getTreeData();\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 (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 // eslint-disable-next-line\n var obj = this.parent.isDragDrop ? 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 // eslint-disable-next-line\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n NavigationPane.prototype.getTreeData = function (args) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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/**\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 };\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 // eslint-disable-next-line\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 persistSelection: (this.parent.enableVirtualization) ? true : false\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 // eslint-disable-next-line\n load: function (args) {\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 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 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 textEle = args.row.querySelector('.e-fe-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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var items = getSortedData(this.parent, (this.parent.enableVirtualization) ? args.result : 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 // eslint-disable-next-line\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 && 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 // eslint-disable-next-line\n DetailsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var items = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) {\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\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 }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var info = null;\n // eslint-disable-next-line\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 || this.parent.path === getDirectoryPath(this.parent, args)) {\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\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 proxy_1.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (proxy_1.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', proxy_1.parent.allowMultiSelection, proxy_1.gridObj.selectionModule);\n addClass([proxy_1.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 = proxy_1.gridObj.getRows().indexOf(row);\n proxy_1.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 // eslint:disable-next-line\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 // eslint:disable-next-line\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n // eslint-disable-next-line\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focItem = this.getFocusedItem();\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 }\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n DetailsView.prototype.getRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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","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","searchSettings","filterType","itemData","getPathObject","caseSensitive","ignoreCase","hiddenItems","showHiddenItems","Search","events.layoutChange","events.search","filter","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","read","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","toLowerCase","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","eventArgs","fileDetails","imageUrl","Date","getTime","toString","trigger","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","Query","sortBy","group","lists","DataManager","executeLocal","getObject","currFiles","feFiles","where","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","isNullOrUndefined","openSearchFolder","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","srcData","dragNodes","tempTarget","dropHandler","dragData","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","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","Array","isArray","events.renameEndParent","events.pathChanged","renameText","events.renameEnd","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","replaceItems","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","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","index","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","splice","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","location","multipleFiles","onDeleteSubmit","modified","CLS.VALUE","size","index_1","undefined","map","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","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","isPrimaryKey","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","adjustHeight","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","slice","call","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","x","xObj","yObj","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","pane","bar","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","name_1","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","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","cList","CLS.CHECK","triggerSelection","startIndex","endIndex","addActive","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","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","parseInt","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","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","pasteEle","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","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","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","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","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","fileData","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","__assign","assign","t","s","n","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","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","Math","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","forEach","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getTreeData","getDragPath","getDropPath","nodeData","addChild","prevent","directories","_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","obj","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","persistSelection","pageSettings","pageSize","enablePersistence","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","reactTemplateRender","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","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","includes","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","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.FileManager","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 } 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 if (!referenceIsFile && comparerIsFile)\n return -1;\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 var comparisonResult = referencePart[0] - comparerPart[0] ||\n referencePart[1].localeCompare(comparerPart[1]);\n if (comparisonResult)\n return comparisonResult;\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 */\n// eslint-disable-next-line\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 // eslint-disable-next-line\n var data = getValue(parent.pathId[i], 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 (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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function getImageUrl(parent, item) {\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var imgUrl;\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None') {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function getObject(parent, key, value) {\n // eslint-disable-next-line\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var query = new Query().where(key, 'equal', value);\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 // eslint-disable-next-line\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\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 * @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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = getObject(parent, key, folders[i]);\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 */\n// eslint-disable-next-line\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, 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 // eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 srcData = 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 ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return parent.hasId ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return 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 */\n// eslint-disable-next-line\nexport function getDuplicateData(parent, name) {\n // eslint-disable-next-line\n var data = null;\n // eslint-disable-next-line\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\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 // eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasReadAccess(data) {\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasEditAccess(data) {\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasContentAccess(data) {\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasUploadAccess(data) {\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function hasDownloadAccess(data) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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","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 } from '../common/utility';\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n // eslint-disable-next-line\n var filterData;\n // eslint-disable-next-line\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 // eslint-disable-next-line\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, \n// eslint-disable-next-line\nrenameItems, actionRecords) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Function for createAjax in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {Function} fn - specifies the fn.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the target path.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\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}\nfunction createAjax(\n// eslint-disable-next-line\nparent, data, fn, event, operation, targetPath) {\n // eslint-disable-next-line\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 parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\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 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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n 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 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 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(\n// eslint-disable-next-line\nparent, 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 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 (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 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 = result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\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 * @param {string} path - specifies the path\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result, path) {\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 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 read(parent, events.pathChanged, parent.path === '/' ? parent.path : getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/') + parent.renamedItem.name + '/');\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 }\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/* 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 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/**\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 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/**\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 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/**\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(\n// eslint:disable-next-line\nparent, event, path, searchString, showHiddenItems, caseSensitive) {\n // eslint-disable-next-line\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 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/* 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 // eslint-disable-next-line\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 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 }\n });\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 * @param {string[]} replaceItems - specifies the replacement.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details, replaceItems) {\n var options = getOptions(parent, text, e, details, replaceItems);\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 * @param {string[]} replaceItems - specifies the replacement items.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details, replaceItems) {\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 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 (e) {\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 (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n var index_1;\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index_1 = val.name.indexOf('.') + 1;\n return (index_1 === 0 && (!val.isFile)) ? 'Folder' : ((index_1 !== 0) ? val.name.substr(index_1).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] == undefined) {\n strArr = details.name.split(',').map(function (val) {\n index_1 = val.indexOf('.') + 1;\n return (index_1 === 0) ? 'Folder' : val.substr(index_1).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 (e) {\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/* istanbul ignore next */\n/**\n *\n * @param {SelectedEventArgs} data - specifies the data.\n * @returns {HTMLElement} - returns the HTML element.\n * @private\n */\nfunction getFilesName(data) {\n var parent = createElement('div', { id: 'uploadDialog' });\n var ulElement = createElement('ul');\n var filesData = data.isModified ? data.modifiedFilesData : data.filesData;\n for (var fileCount = 0; fileCount < filesData.length; fileCount++) {\n var liElement = createElement('li', { className: 'dialogFiles' });\n liElement.innerHTML = filesData[fileCount].name;\n ulElement.appendChild(liElement);\n }\n parent.appendChild(ulElement);\n var errorTag = createElement('div', { className: 'e-fe-error' });\n parent.appendChild(errorTag);\n return parent;\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 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 if (!this.element.style.height) {\n this.adjustHeight();\n }\n this.parent.virtualizationModule.setUIVirtualization();\n }\n // eslint-disable-next-line\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.adjustHeight();\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, xObj, yObj) {\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 ;\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 // eslint-disable-next-line\n this.parent.dragData.push(this.getItemObject(activeEle[i]));\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 // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n // eslint-disable-next-line\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.adjustHeight = function () {\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 this.element.style.height = (pane.offsetHeight - bar.offsetHeight) + 'px';\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 // eslint-disable-next-line\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n // eslint-disable-next-line\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 this.parent.renamedItem = null;\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 this.adjustHeight();\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 // eslint-disable-next-line\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 || this.parent.path === getDirectoryPath(this.parent, args)) {\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 'height':\n this.adjustHeight();\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 if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n eve.originalEvent.preventDefault();\n if (proxy_1.parent.isDevice) {\n proxy_1.tapCount = eve.tapCount;\n proxy_1.tapEvent = eve;\n setTimeout(function () {\n if (proxy_1.tapCount > 0) {\n proxy_1.doTapAction(proxy_1.tapEvent);\n }\n proxy_1.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n proxy_1.dblClickHandler(eve);\n }\n else {\n proxy_1.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n proxy_1.multiSelect = proxy_1.parent.allowMultiSelection ? true : false;\n if (proxy_1.parent.allowMultiSelection) {\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n proxy_1.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.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 // eslint-disable-next-line\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 // eslint:disable-next-line\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 // eslint:disable-next-line\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 }\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 if (!isNOU(this.listObj)) {\n this.adjustHeight();\n }\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 // eslint-disable-next-line\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 = {\n action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n // eslint-disable-next-line\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 ? data : 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 // eslint-disable-next-line\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 () {\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 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 // eslint-disable-next-line\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 // eslint:disable-next-line\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 // eslint:disable-next-line\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 // eslint:disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 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 /* istanbul ignore next */\n // eslint:disable-next-line\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 }\n else if (this.parent.selectedItems.length !== 1 && this.parent.activeModule !== 'navigationpane') {\n this.disabledItems.push('Rename', 'Paste');\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 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 // eslint-disable-next-line\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint:disable-next-line\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 === 'largeiconsview') || (_this.parent.activeModule === 'detailsview')) {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n else {\n _this.parent.folderPath = '';\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 /* istanbul ignore next */\n case 'name':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'size':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'date':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'ascending':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\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 // eslint:disable-next-line\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\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 */\n// eslint-disable-next-line\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 } 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 } 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 // eslint-disable-next-line\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n // eslint-disable-next-line\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\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 // eslint-disable-next-line\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 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 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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n FileManager.prototype.onUploadFailure = function (files) {\n // eslint-disable-next-line\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.wireEvents = function () {\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 EventHandler.remove(window, 'resize', this.resizeHandler);\n this.keyboardModule.destroy();\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 // eslint:disable-next-line\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 '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 }\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 };\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 * 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 // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(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(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 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, \"destroyed\", 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, \"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","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\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 // eslint-disable-next-line\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 = __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 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 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 * @param dataSourceLength The length of the data source.\n * @returns 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 = Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) / (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount * (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 * @param destroy - Set `true` to unwire the scroll event.\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 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.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 * @param startingHeight The starting height from which to calculate the scroll position.\n * @returns The current scroll position.\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 * @param listDiff The number of rows to update.\n * @param isScrollingDown If set to true, the scroll direction is downward.\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 * @param isScrollingDown If set to true, the scroll direction is downward.\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 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 } 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 // eslint-disable-next-line\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n // eslint-disable-next-line\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) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\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 }\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n // eslint-disable-next-line\n var directories = getDirectories(files);\n if (directories.length > 0 &&\n (directories[0].filterPath == null || this.getTreeData(target)[0].filterPath == null || directories[0].filterPath !== this.getTreeData(target)[0].filterPath)) {\n var length_1 = 0;\n // eslint-disable-next-line\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line\n folders[length_1]._fm_icon = 'e-fe-folder';\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 && !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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 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 this.isNodeExpandCalled = true;\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = this.treeObj.getTreeData();\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 (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 // eslint-disable-next-line\n var obj = this.parent.isDragDrop ? 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 // eslint-disable-next-line\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n NavigationPane.prototype.getTreeData = function (args) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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/**\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 };\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n load: function (args) {\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 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 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 textEle = args.row.querySelector('.e-fe-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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var items = getSortedData(this.parent, (this.parent.enableVirtualization) ? args.result : 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 // eslint-disable-next-line\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 && 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 // eslint-disable-next-line\n DetailsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var items = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) {\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\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 }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var info = null;\n // eslint-disable-next-line\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 || this.parent.path === getDirectoryPath(this.parent, args)) {\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\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 proxy_1.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (proxy_1.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', proxy_1.parent.allowMultiSelection, proxy_1.gridObj.selectionModule);\n addClass([proxy_1.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 = proxy_1.gridObj.getRows().indexOf(row);\n proxy_1.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 // eslint:disable-next-line\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 // eslint:disable-next-line\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n // eslint-disable-next-line\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focItem = this.getFocusedItem();\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 }\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n DetailsView.prototype.getRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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","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","searchSettings","filterType","itemData","getPathObject","caseSensitive","ignoreCase","hiddenItems","showHiddenItems","Search","events.layoutChange","events.search","filter","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","read","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","toLowerCase","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","eventArgs","fileDetails","imageUrl","Date","getTime","toString","trigger","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","Query","sortBy","group","lists","DataManager","executeLocal","getObject","currFiles","feFiles","where","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","isNullOrUndefined","openSearchFolder","isRoot","searchData","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","srcData","dragNodes","tempTarget","dropHandler","dragData","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","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","showFileExtension","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","Array","isArray","events.renameEndParent","events.pathChanged","renameText","events.renameEnd","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","replaceItems","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","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","index","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","splice","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","location","multipleFiles","onDeleteSubmit","modified","CLS.VALUE","size","index_1","undefined","map","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","hasOwnProperty","__","constructor","prototype","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","adjustHeight","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","slice","call","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","x","xObj","yObj","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","pane","bar","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","name_1","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","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","cList","CLS.CHECK","triggerSelection","startIndex","endIndex","addActive","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","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","parseInt","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","menuTarget","parentKey","itemKeys_1","_fm_id","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","pasteEle","pasteIndex","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","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","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","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","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","fileData","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","__assign","assign","t","s","n","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","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","Math","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","forEach","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getTreeData","getDragPath","getDropPath","nodeData","addChild","prevent","directories","_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","obj","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","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","SanitizeHtmlHelper","sanitize","_fm_modified","this_1","template_1","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","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","includes","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","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.FileManager","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}
|