@syncfusion/ej2-filemanager 19.4.43 → 19.4.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/ej2-filemanager.umd.min.js +2 -2
- package/dist/ej2-filemanager.umd.min.js.map +1 -1
- package/dist/es6/ej2-filemanager.es2015.js +14 -8
- package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
- package/dist/es6/ej2-filemanager.es5.js +14 -8
- package/dist/es6/ej2-filemanager.es5.js.map +1 -1
- package/dist/global/ej2-filemanager.min.js +2 -2
- package/dist/global/ej2-filemanager.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +12 -12
- package/src/file-manager/base/file-manager.d.ts +1 -0
- package/src/file-manager/base/file-manager.js +2 -0
- package/src/file-manager/base/interface.d.ts +1 -0
- package/src/file-manager/common/utility.js +8 -1
- package/src/file-manager/layout/large-icons-view.d.ts +1 -1
- package/src/file-manager/layout/navigation-pane.js +4 -4
- package/src/file-manager/pop-up/context-menu.js +0 -3
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ej2-filemanager.umd.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/layout/navigation-pane.js","../src/file-manager/layout/details-view.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 read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\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.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, '.e-gridcontent')) {\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 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 + '?path=' + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + '?path=' + fPath.replace(/\\\\/g, '/') + fileName;\n }\n else {\n imgUrl = baseUrl + '?path=' + 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 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);\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 }\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) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n switch (text) {\n case 'date':\n field = '_fm_modified';\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 }\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 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, getParentPath, 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 }\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 (parent.activeModule === 'navigationpane') {\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getParentPath(parent.path));\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, getParentPath, 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 options.dialogName = 'File Details';\n strArr = details.name.split(',').map(function (val) {\n var index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).replace(' ', '');\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') ? getParentPath(parent.path) : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (parent.currentItemText.lastIndexOf('.') === -1))) {\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,\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>'\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 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(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 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 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.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: 'ctrl+x',\n ctrlC: 'ctrl+c',\n ctrlV: '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 = getSortedData(this.parent, this.items);\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 iconsView.classList.remove(CLS.DISPLAY_NONE);\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 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 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 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 this.clearSelection();\n }\n if (!isNOU(item)) {\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 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 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 this.navigateItem(lastItem);\n break;\n case 'home':\n this.navigateItem(firstItem);\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 (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 = this.getItemObject(item);\n var eventArgs = {\n action: action, fileDetails: data, isInteracted: this.isInteraction, cancel: false, target: 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 = this.getItemObject(item);\n this.parent.visitedData = data;\n var eventArgs = { action: action, fileDetails: data, 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) {\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') + ' ' + args.cwd.name;\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 if (target.classList.contains(CLS.FULLROW)) {\n this.parent.selectedItems.length = 0;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\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('aria-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n /* istanbul ignore next */\n // eslint:disable-next-line\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n this.disabledItems.push('Paste');\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n this.disabledItems.push('Open');\n }\n else if (this.parent.selectedItems.length !== 1) {\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) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\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.sortBy = 'name';\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 _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 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 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.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 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 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.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 }];\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.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 uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\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 '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('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 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'), iconCss: CLS.TB_OPTION_DOT },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size') },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified') },\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 enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\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 items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\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) {\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 { 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 } 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 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.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: 'ctrl+x',\n ctrlC: 'ctrl+c',\n ctrlV: '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 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.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = 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 var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n if (args.cancel) {\n this.restrictSelecting = true;\n this.treeObj.selectedNodes = this.isNodeClickCalled ? this.previousSelected : this.treeObj.selectedNodes;\n this.isNodeClickCalled = false;\n if (!isNOU(this.parent) && !isNOU(this.parent.contextmenuModule)) {\n this.parent.contextmenuModule.contextMenu.enableItems(['Open'], true);\n }\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 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 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 }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isPathDragged && !this.isRenameParent) {\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 updatePath(args.node, this.parent.itemData[0], this.parent);\n this.expandNodeTarget = null;\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = args.node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = 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 }\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 };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\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.previousSelected = this.treeObj.selectedNodes;\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 };\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 = select('.' + CLS.LIST_PARENT, sNode);\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 };\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 this.isRenameParent = true;\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 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 this.treeObj.selectedNodes = [getValue('_fm_id', resultObj)];\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 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 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 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: 'ctrl+x',\n ctrlC: 'ctrl+c',\n ctrlV: 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n if (this.parent.isMobile) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick'\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n 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 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 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 value = intl.formatNumber((sizeValue / 1024), { format: 'n' });\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.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) {\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 }\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 };\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 }\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 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 }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\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 = dragLi.getElementsByClassName('e-fe-text')[0].innerText;\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 (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.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 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('aria-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 e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n // eslint-disable-next-line\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focItem = this.getFocusedItem();\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n // eslint-disable-next-line\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n 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 {\n this.addFocus(0);\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.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"],"names":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","matched","getParents","ids","i","length","push","getPathId","pathNames","element","names","getPathNames","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","removeActive","parent","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","read","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","feParent","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","filetype","toLowerCase","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","baseUrl","ajaxSettings","url","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","key","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","files","events.isFile","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","substring","lastIndexOf","field","openSearchFolder","events.clearPathInit","selectedNode","originalPath","events.initialEnd","events.finalizeEnd","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","dropPath","dragPath","subFolder","srcData","dragNodes","len","createDialog","code","message","fileExists","tempTarget","oldPath","newPath","getDirectoryPath","cwd","doPasteUpdate","operation","result","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","dropData","expandedId","events.pathDrag","navigationpaneModule","treeObj","events.dropPath","createVirtualDragElement","dragData","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","dropHandler","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","draggingHandler","canDrop","setTimeout","events.dragging","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","document","click","events.permissionUpload","setValue","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","root","generatePath","setDateObject","rootId","dirs","setNodeId","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","dialogObj","visible","parentElement","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","pop","events.renameEndParent","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","replaceItems","options","formattedString","intl","strArr","location","header","content","buttons","dialogName","open","triggerPopupOpen","close","triggerPopupClose","multipleFiles","buttonModel","isPrimary","onSubmit","createInput","oninput","onValidate","onkeyup","getKeyCode","focus","setSelectionRange","focusInput","bind","this","events.deleteInit","onDeleteSubmit","onReSubmit","inputEle","txt","showFileExtension","index","onFocusRenameInput","Internationalization","formatDate","modified","format","CLS.VALUE","str","keys","Object","objectToString","size","map","val","substr","every","arr","toLocaleUpperCase","events.actionFailure","CLS.ERROR_CONTENT","getOptions","Dialog","beforeOpen","keydownAction","beforeClose","triggerPopupBeforeClose","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","dataBind","show","changeOptions","extOptions","duplicateContent","extDialogObj","renameText","records","getDuplicateData","item_1","indexval","item_2","ind","retryFiles","isRetryOpened","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","isApplySame","checked","retryDlgClose","retryDlgUpdate","splice","events.skipUpload","getExtOptions","beforeExtOpen","CLS.EXTN_DIALOG_ID","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","isKeepBoth","retryArgs","retry","onKeepBothAll","onReplaceAll","flag","placeholder","Input","properties","preventKeydown","selectAll","dlgName","btnElement","_loop_1","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","position","X","Y","updateImage","resizing","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","template","customAttributes","class","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","TOOLBAR_ID","LAYOUT_ID","TREE_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","UPLOAD_DIALOG_ID","CONTEXT_MENU_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","CHECK_SELECT","ROOT_POPUP","MOBILE","MOB_POPUP","MULTI_SELECT","FILTER","LAYOUT_CONTENT","LARGE_ICONS","TB_ITEM","LIST_ITEM","LIST_TEXT","LIST_PARENT","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_ITEM","MENU_ICON","GRID_VIEW","ICON_VIEW","ICON_OPEN","ICON_UPLOAD","ICON_CUT","ICON_COPY","ICON_PASTE","ICON_DELETE","ICON_RENAME","ICON_NEWFOLDER","ICON_DETAILS","ICON_SHORTBY","ICON_REFRESH","ICON_SELECTALL","ICON_DOWNLOAD","ICON_GRID","ICON_LARGE","ICON_BREADCRUMB","ICON_CLEAR","ICONS","ERROR_CONTENT","DISPLAY_NONE","FULLROW","SPLIT_BAR","HEADER_CHECK","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","filterEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","splitterResize","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","layoutRefresh","actionFailure","search","openInit","openEnd","selectionChanged","selectAllInit","clearAllInit","clearPathInit","layoutChange","sortByChange","nodeExpand","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","selectedData","cutCopyInit","pasteInit","pasteEnd","cutEnd","hideLayout","updateTreeSelection","sortColumn","pathColumn","searchTextChange","downloadInit","dropInit","dragEnd","dragging","updateSelectionData","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","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","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","events.hideLayout","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","listElements","ListBase","createListFromJson","itemList","slice","call","preventImgDrag","createDragObj","CLS.DISPLAY_NONE","emptyList","CLS.LIST_PARENT","selectItems","activeEle","CLS.ACTIVE","adjustHeight","maxHeight","getItemCount","wireEvents","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","largeiconsviewModule","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","doSelection","ctrlKey","shiftKey","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.selectedData","events.pathChanged","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.selectAllInit","events.clearAllInit","events.menuItemData","onMenuItemData","events.splitterResize","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","events.layoutRefresh","onDropPath","events.updateSelectionData","events.filterEnd","on","currentSelected","_i","_a","newProp","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","eventName","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","CLS.MULTI_SELECT","updateType","cList","CLS.CHECK","triggerSelection","startIndex","endIndex","addActive","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","navigateItem","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","isVisible","liParent","liScrPos","scrollTop","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","getBoundingClientRect","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","CLS.ICONS","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","getPropertyValue","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","subMenuSpan","DropDownButton","CLS.ICON_BREADCRUMB","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","events.updateTreeSelection","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","CLS.CONTEXT_MENU_ID","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","CLS.FULLROW","targetElement","getTargetView","updateActiveModule","CLS.TOOLBAR_ID","setLayoutItem","CLS.MENU_ITEM","CLS.TREE_ID","detailsviewModule","gridObj","getRowObjectFromUID","selectRows","parseInt","setFileItem","setFolderItem","pasteEle","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","CLS.ICON_VIEW","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","layout","nameEle","menuClickArgs","sItems","events.downloadInit","openFileOnContextMenuClick","separator","CLS.ICON_OPEN","CLS.ICON_UPLOAD","CLS.ICON_CUT","CLS.ICON_COPY","CLS.ICON_PASTE","CLS.ICON_DELETE","CLS.ICON_RENAME","CLS.ICON_NEWFOLDER","CLS.ICON_DETAILS","CLS.ICON_SHORTBY","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","CLS.ICON_REFRESH","CLS.ICON_SELECTALL","CLS.ICON_DOWNLOAD","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","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","setRtl","addEventListeners","splitterObj","collapse","CLS.SPLIT_BAR","renderComplete","CLS.MOBILE","CLS.CHECK_SELECT","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","CLS.LAYOUT_CONTENT","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","CLS.UPLOAD_DIALOG_ID","toolbar","toolBarHeight","clientHeight","splitterAdjust","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","uploading","onUploading","removing","onRemoving","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","uploadSettings","minFileSize","maxFileSize","allowedExtensions","fileListRendering","onFileListRender","updateUploader","clearAll","fileData","customFormData","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","currfolders","folders","setNextPath","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","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","CLS.TB_ITEM","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","updateSortByButton","itemCount","itemTooltip","spanElement","tooltipText","prefixIcon","showTextOn","suffixIcon","CLS.ICON_CLEAR","overflow","align","onSelectionChanged","reRenderToolbar","undefined","hideItem","tools","toHide","refreshOverflow","isEnable","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","dataSource","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","expandNodeTarget","onPathDrag","selectResultNode","events.nodeExpand","onNodeExpanded","innerHtml","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","itemname","checkDropPath","obj","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","Grid","Resize","Sort","VirtualScroll","checkNameWidth","columns","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","detailsViewSettings","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","beforeCopy","load","focusModule","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","iWidth","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","selectedRowIndex","rData","onSortColumn","sortModule","onDetailsResize","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","CLS.HEADER_CHECK","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","firstChild","gridContentColGroup","gridHeaderColNames","selectedRecords","getRowByIndex","lastItemIndex","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","crtSrlPos","crtFocusIndex","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","check","getRecords","hasFilter","name_4","dRecords"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ej2-filemanager.umd.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/layout/navigation-pane.js","../src/file-manager/layout/details-view.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.largeiconsviewModule.items });\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.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, '.e-gridcontent')) {\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 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 + '?path=' + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + '?path=' + fPath.replace(/\\\\/g, '/') + fileName;\n }\n else {\n imgUrl = baseUrl + '?path=' + 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);\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 }\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) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n switch (text) {\n case 'date':\n field = '_fm_modified';\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 }\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 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, getParentPath, 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 }\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 (parent.activeModule === 'navigationpane') {\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getParentPath(parent.path));\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, getParentPath, 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 options.dialogName = 'File Details';\n strArr = details.name.split(',').map(function (val) {\n var index = val.indexOf('.') + 1;\n return (index === 0) ? 'Folder' : val.substr(index).replace(' ', '');\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') ? getParentPath(parent.path) : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (parent.currentItemText.lastIndexOf('.') === -1))) {\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,\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>'\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 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(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 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 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.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: 'ctrl+x',\n ctrlC: 'ctrl+c',\n ctrlV: '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 = getSortedData(this.parent, this.items);\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 iconsView.classList.remove(CLS.DISPLAY_NONE);\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 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 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 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 this.clearSelection();\n }\n if (!isNOU(item)) {\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 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 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 this.navigateItem(lastItem);\n break;\n case 'home':\n this.navigateItem(firstItem);\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 (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 = this.getItemObject(item);\n var eventArgs = {\n action: action, fileDetails: data, isInteracted: this.isInteraction, cancel: false, target: 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 = this.getItemObject(item);\n this.parent.visitedData = data;\n var eventArgs = { action: action, fileDetails: data, 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) {\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') + ' ' + args.cwd.name;\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 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('aria-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n /* istanbul ignore next */\n // eslint:disable-next-line\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n this.disabledItems.push('Paste');\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n this.disabledItems.push('Open');\n }\n else if (this.parent.selectedItems.length !== 1) {\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) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\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.sortBy = 'name';\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 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 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.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 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 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.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 }];\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.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 uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\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 '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('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 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'), iconCss: CLS.TB_OPTION_DOT },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size') },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified') },\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 enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\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 items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\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) {\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 { 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 } 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 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.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: 'ctrl+x',\n ctrlC: 'ctrl+c',\n ctrlV: '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 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.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 var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] != args.node.getAttribute('data-uid') : false;\n this.treeObj.selectedNodes = this.isNodeClickCalled ? this.previousSelected : this.treeObj.selectedNodes;\n this.previousSelected = this.treeObj.selectedNodes;\n if (!isNOU(this.parent) && !isNOU(this.parent.contextmenuModule)) {\n this.parent.contextmenuModule.contextMenu.enableItems(['Open'], true);\n }\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 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 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 }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isPathDragged && !this.isRenameParent) {\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 updatePath(args.node, this.parent.itemData[0], this.parent);\n this.expandNodeTarget = null;\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = args.node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = 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 }\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 };\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 };\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 = select('.' + CLS.LIST_PARENT, sNode);\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 };\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 this.isRenameParent = true;\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 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 this.treeObj.selectedNodes = [getValue('_fm_id', resultObj)];\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 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 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 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: 'ctrl+x',\n ctrlC: 'ctrl+c',\n ctrlV: 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n if (this.parent.isMobile) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick'\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n 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 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 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 value = intl.formatNumber((sizeValue / 1024), { format: 'n' });\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.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) {\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 }\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 };\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 }\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 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 }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\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 = dragLi.getElementsByClassName('e-fe-text')[0].innerText;\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 (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.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 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('aria-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 e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n // eslint-disable-next-line\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focItem = this.getFocusedItem();\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n // eslint-disable-next-line\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n 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 {\n this.addFocus(0);\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.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"],"names":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","matched","getParents","ids","i","length","push","getPathId","pathNames","element","names","getPathNames","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","removeActive","parent","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","largeiconsviewModule","items","read","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","feParent","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","filetype","toLowerCase","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","baseUrl","ajaxSettings","url","fileName","encodeURIComponent","fPath","imgId","replace","eventArgs","fileDetails","imageUrl","Date","getTime","toString","trigger","getFullPath","filePath","getName","name","getSortedData","query","sortOrder","Query","sortBy","group","lists","DataManager","executeLocal","getObject","key","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","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","substring","lastIndexOf","field","openSearchFolder","events.clearPathInit","selectedNode","originalPath","events.initialEnd","events.finalizeEnd","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","dropPath","dragPath","subFolder","srcData","dragNodes","len","createDialog","code","message","fileExists","tempTarget","oldPath","newPath","getDirectoryPath","cwd","doPasteUpdate","operation","result","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","dropData","expandedId","events.pathDrag","navigationpaneModule","treeObj","events.dropPath","createVirtualDragElement","dragData","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","dropHandler","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","draggingHandler","canDrop","setTimeout","events.dragging","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","document","click","events.permissionUpload","setValue","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","root","generatePath","setDateObject","rootId","dirs","setNodeId","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","dialogObj","visible","parentElement","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","pop","events.renameEndParent","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","replaceItems","options","formattedString","intl","strArr","location","header","content","buttons","dialogName","open","triggerPopupOpen","close","triggerPopupClose","multipleFiles","buttonModel","isPrimary","onSubmit","createInput","oninput","onValidate","onkeyup","getKeyCode","focus","setSelectionRange","focusInput","bind","this","events.deleteInit","onDeleteSubmit","onReSubmit","inputEle","txt","showFileExtension","index","onFocusRenameInput","Internationalization","formatDate","modified","format","CLS.VALUE","str","keys","Object","objectToString","size","map","val","substr","every","arr","toLocaleUpperCase","events.actionFailure","CLS.ERROR_CONTENT","getOptions","Dialog","beforeOpen","keydownAction","beforeClose","triggerPopupBeforeClose","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","dataBind","show","changeOptions","extOptions","duplicateContent","extDialogObj","renameText","records","getDuplicateData","item_1","indexval","item_2","ind","retryFiles","isRetryOpened","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","isApplySame","checked","retryDlgClose","retryDlgUpdate","splice","events.skipUpload","getExtOptions","beforeExtOpen","CLS.EXTN_DIALOG_ID","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","isKeepBoth","retryArgs","retry","onKeepBothAll","onReplaceAll","flag","placeholder","Input","properties","preventKeydown","selectAll","dlgName","btnElement","_loop_1","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","position","X","Y","updateImage","resizing","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","template","customAttributes","class","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","TOOLBAR_ID","LAYOUT_ID","TREE_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","UPLOAD_DIALOG_ID","CONTEXT_MENU_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","CHECK_SELECT","ROOT_POPUP","MOBILE","MOB_POPUP","MULTI_SELECT","FILTER","LAYOUT_CONTENT","LARGE_ICONS","TB_ITEM","LIST_ITEM","LIST_TEXT","LIST_PARENT","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_ITEM","MENU_ICON","GRID_VIEW","ICON_VIEW","ICON_OPEN","ICON_UPLOAD","ICON_CUT","ICON_COPY","ICON_PASTE","ICON_DELETE","ICON_RENAME","ICON_NEWFOLDER","ICON_DETAILS","ICON_SHORTBY","ICON_REFRESH","ICON_SELECTALL","ICON_DOWNLOAD","ICON_GRID","ICON_LARGE","ICON_BREADCRUMB","ICON_CLEAR","ICONS","ERROR_CONTENT","DISPLAY_NONE","FULLROW","SPLIT_BAR","HEADER_CHECK","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","filterEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","splitterResize","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","layoutRefresh","actionFailure","search","openInit","openEnd","selectionChanged","selectAllInit","clearAllInit","clearPathInit","layoutChange","sortByChange","nodeExpand","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","selectedData","cutCopyInit","pasteInit","pasteEnd","cutEnd","hideLayout","updateTreeSelection","sortColumn","pathColumn","searchTextChange","downloadInit","dropInit","dragEnd","dragging","updateSelectionData","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","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","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","events.hideLayout","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","listElements","ListBase","createListFromJson","itemList","slice","call","preventImgDrag","createDragObj","CLS.DISPLAY_NONE","emptyList","CLS.LIST_PARENT","selectItems","activeEle","CLS.ACTIVE","adjustHeight","maxHeight","getItemCount","wireEvents","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","doSelection","ctrlKey","shiftKey","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.selectedData","events.pathChanged","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.selectAllInit","events.clearAllInit","events.menuItemData","onMenuItemData","events.splitterResize","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","events.layoutRefresh","onDropPath","events.updateSelectionData","events.filterEnd","on","currentSelected","_i","_a","newProp","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","eventName","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","CLS.MULTI_SELECT","updateType","cList","CLS.CHECK","triggerSelection","startIndex","endIndex","addActive","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","navigateItem","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","isVisible","liParent","liScrPos","scrollTop","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","getBoundingClientRect","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","CLS.ICONS","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","getPropertyValue","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","subMenuSpan","DropDownButton","CLS.ICON_BREADCRUMB","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","events.updateTreeSelection","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","CLS.CONTEXT_MENU_ID","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","CLS.FULLROW","targetElement","getTargetView","updateActiveModule","CLS.TOOLBAR_ID","setLayoutItem","CLS.MENU_ITEM","CLS.TREE_ID","detailsviewModule","gridObj","getRowObjectFromUID","selectRows","parseInt","setFileItem","setFolderItem","pasteEle","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","CLS.ICON_VIEW","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","layout","nameEle","menuClickArgs","sItems","events.downloadInit","openFileOnContextMenuClick","separator","CLS.ICON_OPEN","CLS.ICON_UPLOAD","CLS.ICON_CUT","CLS.ICON_COPY","CLS.ICON_PASTE","CLS.ICON_DELETE","CLS.ICON_RENAME","CLS.ICON_NEWFOLDER","CLS.ICON_DETAILS","CLS.ICON_SHORTBY","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","CLS.ICON_REFRESH","CLS.ICON_SELECTALL","CLS.ICON_DOWNLOAD","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","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","setRtl","addEventListeners","splitterObj","collapse","CLS.SPLIT_BAR","renderComplete","CLS.MOBILE","CLS.CHECK_SELECT","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","CLS.LAYOUT_CONTENT","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","CLS.UPLOAD_DIALOG_ID","toolbar","toolBarHeight","clientHeight","splitterAdjust","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","uploading","onUploading","removing","onRemoving","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","uploadSettings","minFileSize","maxFileSize","allowedExtensions","fileListRendering","onFileListRender","updateUploader","clearAll","fileData","customFormData","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","currfolders","folders","setNextPath","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","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","CLS.TB_ITEM","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","updateSortByButton","itemCount","itemTooltip","spanElement","tooltipText","prefixIcon","showTextOn","suffixIcon","CLS.ICON_CLEAR","overflow","align","onSelectionChanged","reRenderToolbar","undefined","hideItem","tools","toHide","refreshOverflow","isEnable","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","dataSource","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","expandNodeTarget","onPathDrag","selectResultNode","events.nodeExpand","onNodeExpanded","innerHtml","sNode","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","itemname","checkDropPath","obj","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","Grid","Resize","Sort","VirtualScroll","checkNameWidth","columns","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","detailsViewSettings","columnResizing","selectionSettings","checkboxMode","pageSettings","pageSize","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","beforeCopy","load","focusModule","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","iWidth","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","selectedRowIndex","rData","onSortColumn","sortModule","onDetailsResize","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","CLS.HEADER_CHECK","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","firstChild","gridContentColGroup","gridHeaderColNames","selectedRecords","getRowByIndex","lastItemIndex","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","crtSrlPos","crtFocusIndex","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","check","getRecords","hasFilter","name_4","dRecords"],"mappings":"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"}
|