@syncfusion/ej2-filemanager 21.1.41 → 21.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.
@@ -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 } 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 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) {\n for (var i = 0; i < args.length; i++) {\n setValue('_fm_created', new Date(getValue('dateCreated', args[i])), args[i]);\n setValue('_fm_modified', new Date(getValue('dateModified', args[i])), 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 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 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.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n parent.originalPath = getFullPath(parent, data, parent.path);\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 * 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 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 }\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 }\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 /* 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, createElement, select, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath } 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\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 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 if (!isNOU(result.files)) {\n setDateObject(result.files);\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')) {\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 = result.files[0];\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 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 }\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 eventArgs = { data: data, cancel: false };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\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 });\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// eslint:disable-next-line\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// eslint:disable-next-line\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 */\n// eslint-disable-next-line\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/* istanbul ignore next */\n// eslint:disable-next-line\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 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 toolbarItems = ['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(toolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\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 } 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>', 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', template: '<span class=\"e-fe-size\">${size}</span>', 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, \"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 } 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 this.items = this.allItems = getSortedData(this.parent, this.items);\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.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.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.parent.isMobile && 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: true,\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.allowMultiSelection) {\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 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 };\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 };\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.allowMultiSelection) {\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.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 };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n this.disabledItems = [];\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 var selectedTreeNode = select('[data-uid=\"' + this.parent.navigationpaneModule.treeObj.selectedNodes[0] + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n else 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 // 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 }\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 };\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.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 } 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 { 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 });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this]\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this]\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this]\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 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 _super.prototype.destroy.call(this);\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)) {\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)) {\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 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 Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", 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","import { 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.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 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 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 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: largeIconSpan + getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: gridSpan + 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 });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\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 itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\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 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 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 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 getLocaleText(this.parent, 'View') + '></button>'\n };\n break;\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 };\n break;\n }\n items.push(item);\n }\n return items;\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 if (e.newProp.toolbarSettings.items !== undefined) {\n this.items = this.toolbarItemData(this.getItems(e.newProp.toolbarSettings.items.map(function (item) { return item.trim(); })));\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 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 // 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: true,\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 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 // eslint-disable-next-line\n this.treeObj.addNodes(directories, target, null, prevent);\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 && args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1]) {\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: args.isInteracted };\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 var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n if (!this.isRightClick && this.isSameNodeClicked && sNode.querySelector('.e-list-text').innerHTML !== this.parent.pathNames[this.parent.pathNames.length - 1]) {\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 (previousPath !== this.parent.path) {\n this.expandNodeTarget = null;\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\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 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.removeChildNodes(id);\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 } 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 /* istanbul ignore next */\n // eslint:disable-next-line\n this.actionDivert = 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 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 /**\n * Gets the grid height.\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 if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: '<div class=\"e-fe-text\">${name}</div><div class=\"e-fe-date\">${_fm_modified}</div>' +\n '<span class=\"e-fe-size\">${size}</span>'\n }\n ];\n }\n else {\n columns = JSON.parse(JSON.stringify(this.parent.detailsViewSettings.columns));\n this.adjustWidth(columns, 'name');\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].headerText = getLocaleText(this.parent, columns[i].headerText);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth, template: '<span class=\"e-fe-icon ${_fm_iconClass}\"></span>',\n allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: '<span class=\"e-fe-icon e-fe-folder\"></span>'\n };\n columns.unshift(icon);\n if (this.parent.allowMultiSelection) {\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 = columns[i].format.toString();\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n var num = Number(value.replace(/,/g, ''));\n value = num.toLocaleString(intl.culture);\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 showSpinner(this.parent.element);\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 /* 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 }\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 }\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 (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 = dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName(\"e-rowcell e-templatecell\")[0].nextElementSibling) {\n name = 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.parent.isMobile && 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: true,\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 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 if (this.parent.allowMultiSelection && !isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n var checkItem = item.querySelector('.e-checkselect');\n checkItem.focus();\n }\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 };\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 };\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.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 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 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) {\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 if (!this.actionDivert) {\n this.addHeaderFocus();\n this.actionDivert = true;\n }\n else {\n this.addFocus(0);\n this.actionDivert = false;\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 () {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus = select('th.e-fe-grid-name', this.element);\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 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":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","length","ids","push","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","replace","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","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","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","draggingHandler","canDrop","setTimeout","events.dragging","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","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","parentElement","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","renameText","events.renameEndParent","events.pathChanged","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","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","showFileExtension","placeholder","Input","properties","formattedString","strArr","location","multipleFiles","onDeleteSubmit","Internationalization","formatDate","modified","format","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","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","position","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__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","toolbarItems","ToolbarSettings","SearchSettings","columnArray","headerText","minWidth","isPrimaryKey","template","customAttributes","class","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","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","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","allowMultiSelection","checkElement","createCheckBox","firstElementChild","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","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","getBoundingClientRect","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","isNullOrUndefined","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","link","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","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","clientHeight","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","disableToolbarItems","toolbarModule","enableToolbarItems","disableMenuItems","contextmenuModule","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","updateSortByButton","itemCount","itemTooltip","spanElement","tooltipText","prefixIcon","showTextOn","suffixIcon","overflow","align","onSelectionChanged","reRenderToolbar","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","firstChild","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","addNodes","selecEventArgs","sNode","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","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","actionDivert","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","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","iWidth","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","intl","sizeFormat","formatNumber","Number","toLocaleString","culture","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","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","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tabIndex","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 } 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 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) {\n for (var i = 0; i < args.length; i++) {\n setValue('_fm_created', new Date(getValue('dateCreated', args[i])), args[i]);\n setValue('_fm_modified', new Date(getValue('dateModified', args[i])), 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 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 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.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n parent.originalPath = getFullPath(parent, data, parent.path);\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 * 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 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 }\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 }\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 /* 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, createElement, select, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath } 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\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 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 if (!isNOU(result.files)) {\n setDateObject(result.files);\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')) {\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 = result.files[0];\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 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 }\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 eventArgs = { data: data, cancel: false };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\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 });\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// eslint:disable-next-line\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// eslint:disable-next-line\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 */\n// eslint-disable-next-line\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/* istanbul ignore next */\n// eslint:disable-next-line\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 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 toolbarItems = ['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(toolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\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 } 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>', 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', template: '<span class=\"e-fe-size\">${size}</span>', 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, \"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 } 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 this.items = this.allItems = getSortedData(this.parent, this.items);\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.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.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.parent.isMobile && 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: true,\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.allowMultiSelection) {\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 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 };\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 };\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.allowMultiSelection) {\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.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 };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n this.disabledItems = [];\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 var selectedTreeNode = select('[data-uid=\"' + this.parent.navigationpaneModule.treeObj.selectedNodes[0] + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n else 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 // 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 }\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 };\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.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 } 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 { 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 });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this]\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this]\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this]\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 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 _super.prototype.destroy.call(this);\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)) {\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)) {\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 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 Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", 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","import { 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.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 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 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 = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: largeIconSpan + getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: gridSpan + 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 });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\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 itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\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 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 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 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 getLocaleText(this.parent, 'View') + '></button>'\n };\n break;\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 };\n break;\n }\n items.push(item);\n }\n return items;\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 if (e.newProp.toolbarSettings.items !== undefined) {\n this.items = this.toolbarItemData(this.getItems(e.newProp.toolbarSettings.items.map(function (item) { return item.trim(); })));\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 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 // 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: true,\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 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 // eslint-disable-next-line\n this.treeObj.addNodes(directories, target, null, prevent);\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 && args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1]) {\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 var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n if (!this.isRightClick && this.isSameNodeClicked && sNode.querySelector('.e-list-text').innerHTML !== this.parent.pathNames[this.parent.pathNames.length - 1]) {\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 this.expandNodeTarget = null;\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 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.removeChildNodes(id);\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 } 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 /* istanbul ignore next */\n // eslint:disable-next-line\n this.actionDivert = 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 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 /**\n * Gets the grid height.\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 if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: '<div class=\"e-fe-text\">${name}</div><div class=\"e-fe-date\">${_fm_modified}</div>' +\n '<span class=\"e-fe-size\">${size}</span>'\n }\n ];\n }\n else {\n columns = JSON.parse(JSON.stringify(this.parent.detailsViewSettings.columns));\n this.adjustWidth(columns, 'name');\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].headerText = getLocaleText(this.parent, columns[i].headerText);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth, template: '<span class=\"e-fe-icon ${_fm_iconClass}\"></span>',\n allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: '<span class=\"e-fe-icon e-fe-folder\"></span>'\n };\n columns.unshift(icon);\n if (this.parent.allowMultiSelection) {\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 var num = Number(value.replace(/,/g, ''));\n value = num.toLocaleString(intl.culture);\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 showSpinner(this.parent.element);\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 /* 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 }\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 (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 = dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName(\"e-rowcell e-templatecell\")[0].nextElementSibling) {\n name = 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.parent.isMobile && 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: true,\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 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 if (this.parent.allowMultiSelection && !isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n var checkItem = item.querySelector('.e-checkselect');\n checkItem.focus();\n }\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 };\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 };\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.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 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 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) {\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 if (!this.actionDivert) {\n this.addHeaderFocus();\n this.actionDivert = true;\n }\n else {\n this.addFocus(0);\n this.actionDivert = false;\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 () {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus = select('th.e-fe-grid-name', this.element);\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 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":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","length","ids","push","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","replace","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","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","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","draggingHandler","canDrop","setTimeout","events.dragging","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","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","parentElement","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","renameText","events.renameEndParent","events.pathChanged","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","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","showFileExtension","placeholder","Input","properties","formattedString","strArr","location","multipleFiles","onDeleteSubmit","Internationalization","formatDate","modified","format","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","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","position","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__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","toolbarItems","ToolbarSettings","SearchSettings","columnArray","headerText","minWidth","isPrimaryKey","template","customAttributes","class","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","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","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","allowMultiSelection","checkElement","createCheckBox","firstElementChild","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","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","getBoundingClientRect","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","isNullOrUndefined","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","link","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","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","clientHeight","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","disableToolbarItems","toolbarModule","enableToolbarItems","disableMenuItems","contextmenuModule","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","updateSortByButton","itemCount","itemTooltip","spanElement","tooltipText","prefixIcon","showTextOn","suffixIcon","overflow","align","onSelectionChanged","reRenderToolbar","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","firstChild","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","addNodes","selecEventArgs","sNode","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","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","actionDivert","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","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","iWidth","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","intl","sizeFormat","formatNumber","Number","toLocaleString","culture","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","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","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tabIndex","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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"}