aboutsummaryrefslogtreecommitdiffstats
path: root/dist/files_trashbin-main.js.map
blob: 55ecef87f9ddb330ee64e1cb131515b318216eae (plain)
1
{"version":3,"file":"files_trashbin-main.js?v=f3cb1bbbfdc0698cc9e9","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.esm.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/services/DavProperties.ts","webpack:///nextcloud/apps/files_trashbin/src/services/client.ts","webpack:///nextcloud/apps/files_trashbin/src/services/trashbin.ts","webpack:///nextcloud/apps/files/src/services/FileAction.ts","webpack:///nextcloud/apps/files_trashbin/src/actions/restoreAction.ts","webpack:///nextcloud/apps/files_trashbin/src/main.ts","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import { getCanonicalLocale } from '@nextcloud/l10n';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { getLoggerBuilder } from '@nextcloud/logger';\nimport { join, basename, extname, dirname } from 'path';\n\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst humanList = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\nconst humanListBinary = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'];\n/**\n * Format a file size in a human-like format. e.g. 42GB\n *\n * @param size in bytes\n * @param skipSmallSizes avoid rendering tiny sizes and return '< 1 KB' instead\n */\nfunction formatFileSize(size, skipSmallSizes = false, binaryPrefixes = false) {\n    if (typeof size === 'string') {\n        size = Number(size);\n    }\n    /*\n    * @note This block previously used Log base 1024, per IEC 80000-13;\n    * however, the wrong prefix was used. Now we use decimal calculation\n    * with base 1000 per the SI. Base 1024 calculation with binary\n    * prefixes is optional, but has yet to be added to the UI.\n    */\n    // Calculate Log with base 1024 or 1000: size = base ** order\n    let order = size > 0 ? Math.floor(Math.log(size) / Math.log(binaryPrefixes ? 1024 : 1000)) : 0;\n    // Stay in range of the byte sizes that are defined\n    order = Math.min((binaryPrefixes ? humanListBinary.length : humanList.length) - 1, order);\n    const readableFormat = binaryPrefixes ? humanListBinary[order] : humanList[order];\n    let relativeSize = (size / Math.pow(binaryPrefixes ? 1024 : 1000, order)).toFixed(1);\n    if (skipSmallSizes === true && order === 0) {\n        return (relativeSize !== '0.0' ? '< 1 ' : '0 ') + (binaryPrefixes ? humanListBinary[1] : humanList[1]);\n    }\n    if (order < 2) {\n        relativeSize = parseFloat(relativeSize).toFixed(0);\n    }\n    else {\n        relativeSize = parseFloat(relativeSize).toLocaleString(getCanonicalLocale());\n    }\n    return relativeSize + ' ' + readableFormat;\n}\n\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst getLogger = user => {\n    if (user === null) {\n        return getLoggerBuilder()\n            .setApp('files')\n            .build();\n    }\n    return getLoggerBuilder()\n        .setApp('files')\n        .setUid(user.uid)\n        .build();\n};\nvar logger = getLogger(getCurrentUser());\n\n/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass NewFileMenu {\n    _entries = [];\n    registerEntry(entry) {\n        this.validateEntry(entry);\n        this._entries.push(entry);\n    }\n    unregisterEntry(entry) {\n        const entryIndex = typeof entry === 'string'\n            ? this.getEntryIndex(entry)\n            : this.getEntryIndex(entry.id);\n        if (entryIndex === -1) {\n            logger.warn('Entry not found, nothing removed', { entry, entries: this.getEntries() });\n            return;\n        }\n        this._entries.splice(entryIndex, 1);\n    }\n    /**\n     * Get the list of registered entries\n     *\n     * @param {FileInfo} context the creation context. Usually the current folder FileInfo\n     */\n    getEntries(context) {\n        if (context) {\n            return this._entries\n                .filter(entry => typeof entry.if === 'function' ? entry.if(context) : true);\n        }\n        return this._entries;\n    }\n    getEntryIndex(id) {\n        return this._entries.findIndex(entry => entry.id === id);\n    }\n    validateEntry(entry) {\n        if (!entry.id || !entry.displayName || !(entry.iconSvgInline || entry.iconClass)) {\n            throw new Error('Invalid entry');\n        }\n        if (typeof entry.id !== 'string'\n            || typeof entry.displayName !== 'string') {\n            throw new Error('Invalid id or displayName property');\n        }\n        if ((entry.iconClass && typeof entry.iconClass !== 'string')\n            || (entry.iconSvgInline && typeof entry.iconSvgInline !== 'string')) {\n            throw new Error('Invalid icon provided');\n        }\n        if (entry.if !== undefined && typeof entry.if !== 'function') {\n            throw new Error('Invalid if property');\n        }\n        if (entry.templateName && typeof entry.templateName !== 'string') {\n            throw new Error('Invalid templateName property');\n        }\n        if (entry.handler && typeof entry.handler !== 'function') {\n            throw new Error('Invalid handler property');\n        }\n        if (!entry.templateName && !entry.handler) {\n            throw new Error('At least a templateName or a handler must be provided');\n        }\n        if (this.getEntryIndex(entry.id) !== -1) {\n            throw new Error('Duplicate entry');\n        }\n    }\n}\nconst getNewFileMenu = function () {\n    if (typeof window._nc_newfilemenu === 'undefined') {\n        window._nc_newfilemenu = new NewFileMenu();\n        logger.debug('NewFileMenu initialized');\n    }\n    return window._nc_newfilemenu;\n};\n\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar FileType;\n(function (FileType) {\n    FileType[\"Folder\"] = \"folder\";\n    FileType[\"File\"] = \"file\";\n})(FileType || (FileType = {}));\n\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Permission;\n(function (Permission) {\n    Permission[Permission[\"NONE\"] = 0] = \"NONE\";\n    Permission[Permission[\"CREATE\"] = 4] = \"CREATE\";\n    Permission[Permission[\"READ\"] = 1] = \"READ\";\n    Permission[Permission[\"UPDATE\"] = 2] = \"UPDATE\";\n    Permission[Permission[\"DELETE\"] = 8] = \"DELETE\";\n    Permission[Permission[\"SHARE\"] = 16] = \"SHARE\";\n    Permission[Permission[\"ALL\"] = 31] = \"ALL\";\n})(Permission || (Permission = {}));\n/**\n * Parse the webdav permission string to a permission enum\n * @see https://github.com/nextcloud/server/blob/71f698649f578db19a22457cb9d420fb62c10382/lib/public/Files/DavUtil.php#L58-L88\n */\nconst parseWebdavPermissions = function (permString = '') {\n    let permissions = Permission.NONE;\n    if (!permString)\n        return permissions;\n    if (permString.includes('C') || permString.includes('K'))\n        permissions |= Permission.CREATE;\n    if (permString.includes('G'))\n        permissions |= Permission.READ;\n    if (permString.includes('W') || permString.includes('N') || permString.includes('V'))\n        permissions |= Permission.UPDATE;\n    if (permString.includes('D'))\n        permissions |= Permission.DELETE;\n    if (permString.includes('R'))\n        permissions |= Permission.SHARE;\n    return permissions;\n};\n\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst isDavRessource = function (source, davService) {\n    return source.match(davService) !== null;\n};\n/**\n * Validate Node construct data\n */\nconst validateData = (data, davService) => {\n    if ('id' in data && (typeof data.id !== 'number' || data.id < 0)) {\n        throw new Error('Invalid id type of value');\n    }\n    if (!data.source) {\n        throw new Error('Missing mandatory source');\n    }\n    try {\n        new URL(data.source);\n    }\n    catch (e) {\n        throw new Error('Invalid source format, source must be a valid URL');\n    }\n    if (!data.source.startsWith('http')) {\n        throw new Error('Invalid source format, only http(s) is supported');\n    }\n    if ('mtime' in data && !(data.mtime instanceof Date)) {\n        throw new Error('Invalid mtime type');\n    }\n    if ('crtime' in data && !(data.crtime instanceof Date)) {\n        throw new Error('Invalid crtime type');\n    }\n    if (!data.mime || typeof data.mime !== 'string'\n        || !data.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi)) {\n        throw new Error('Missing or invalid mandatory mime');\n    }\n    if ('size' in data && typeof data.size !== 'number') {\n        throw new Error('Invalid size type');\n    }\n    if ('permissions' in data && !(typeof data.permissions === 'number'\n        && data.permissions >= Permission.NONE\n        && data.permissions <= Permission.ALL)) {\n        throw new Error('Invalid permissions');\n    }\n    if ('owner' in data\n        && data.owner !== null\n        && typeof data.owner !== 'string') {\n        throw new Error('Invalid owner type');\n    }\n    if ('attributes' in data && typeof data.attributes !== 'object') {\n        throw new Error('Invalid attributes format');\n    }\n    if ('root' in data && typeof data.root !== 'string') {\n        throw new Error('Invalid root format');\n    }\n    if (data.root && !data.root.startsWith('/')) {\n        throw new Error('Root must start with a leading slash');\n    }\n    if (data.root && !data.source.includes(data.root)) {\n        throw new Error('Root must be part of the source');\n    }\n    if (data.root && isDavRessource(data.source, davService)) {\n        const service = data.source.match(davService)[0];\n        if (!data.source.includes(join(service, data.root))) {\n            throw new Error('The root must be relative to the service. e.g /files/emma');\n        }\n    }\n};\n\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Node {\n    _data;\n    _attributes;\n    _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n    constructor(data, davService) {\n        // Validate data\n        validateData(data, davService || this._knownDavService);\n        this._data = data;\n        const handler = {\n            set: (target, prop, value) => {\n                // Edit modification time\n                this._data['mtime'] = new Date();\n                // Apply original changes\n                return Reflect.set(target, prop, value);\n            },\n            deleteProperty: (target, prop) => {\n                // Edit modification time\n                this._data['mtime'] = new Date();\n                // Apply original changes\n                return Reflect.deleteProperty(target, prop);\n            },\n        };\n        // Proxy the attributes to update the mtime on change\n        this._attributes = new Proxy(data.attributes || {}, handler);\n        delete this._data.attributes;\n        if (davService) {\n            this._knownDavService = davService;\n        }\n    }\n    /**\n     * Get the source url to this object\n     */\n    get source() {\n        // strip any ending slash\n        return this._data.source.replace(/\\/$/i, '');\n    }\n    /**\n     * Get this object name\n     */\n    get basename() {\n        return basename(this.source);\n    }\n    /**\n     * Get this object's extension\n     */\n    get extension() {\n        return extname(this.source);\n    }\n    /**\n     * Get the directory path leading to this object\n     * Will use the relative path to root if available\n     */\n    get dirname() {\n        if (this.root) {\n            // Using replace would remove all part matching root\n            const firstMatch = this.source.indexOf(this.root);\n            return dirname(this.source.slice(firstMatch + this.root.length) || '/');\n        }\n        // This should always be a valid URL\n        // as this is tested in the constructor\n        const url = new URL(this.source);\n        return dirname(url.pathname);\n    }\n    /**\n     * Get the file mime\n     */\n    get mime() {\n        return this._data.mime;\n    }\n    /**\n     * Get the file modification time\n     */\n    get mtime() {\n        return this._data.mtime;\n    }\n    /**\n     * Get the file creation time\n     */\n    get crtime() {\n        return this._data.crtime;\n    }\n    /**\n     * Get the file size\n     */\n    get size() {\n        return this._data.size;\n    }\n    /**\n     * Get the file attribute\n     */\n    get attributes() {\n        return this._attributes;\n    }\n    /**\n     * Get the file permissions\n     */\n    get permissions() {\n        // If this is not a dav ressource, we can only read it\n        if (this.owner === null && !this.isDavRessource) {\n            return Permission.READ;\n        }\n        // If the permissions are not defined, we have none\n        return this._data.permissions !== undefined\n            ? this._data.permissions\n            : Permission.NONE;\n    }\n    /**\n     * Get the file owner\n     */\n    get owner() {\n        // Remote ressources have no owner\n        if (!this.isDavRessource) {\n            return null;\n        }\n        return this._data.owner;\n    }\n    /**\n     * Is this a dav-related ressource ?\n     */\n    get isDavRessource() {\n        return isDavRessource(this.source, this._knownDavService);\n    }\n    /**\n     * Get the dav root of this object\n     */\n    get root() {\n        // If provided (recommended), use the root and strip away the ending slash\n        if (this._data.root) {\n            return this._data.root.replace(/^(.+)\\/$/, '$1');\n        }\n        // Use the source to get the root from the dav service\n        if (this.isDavRessource) {\n            const root = dirname(this.source);\n            return root.split(this._knownDavService).pop() || null;\n        }\n        return null;\n    }\n    /**\n     * Get the absolute path of this object relative to the root\n     */\n    get path() {\n        if (this.root) {\n            // Using replace would remove all part matching root\n            const firstMatch = this.source.indexOf(this.root);\n            return this.source.slice(firstMatch + this.root.length) || '/';\n        }\n        return (this.dirname + '/' + this.basename).replace(/\\/\\//g, '/');\n    }\n    /**\n     * Get the node id if defined.\n     * Will look for the fileid in attributes if undefined.\n     */\n    get fileid() {\n        return this._data?.id || this.attributes?.fileid;\n    }\n    /**\n     * Move the node to a new destination\n     *\n     * @param {string} destination the new source.\n     * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n     */\n    move(destination) {\n        validateData({ ...this._data, source: destination }, this._knownDavService);\n        this._data.source = destination;\n        this._data.mtime = new Date();\n    }\n    /**\n     * Rename the node\n     * This aliases the move method for easier usage\n     */\n    rename(basename) {\n        if (basename.includes('/')) {\n            throw new Error('Invalid basename');\n        }\n        this.move(dirname(this.source) + '/' + basename);\n    }\n}\n\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass File extends Node {\n    get type() {\n        return FileType.File;\n    }\n}\n\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Folder extends Node {\n    constructor(data) {\n        // enforcing mimes\n        super({\n            ...data,\n            mime: 'httpd/unix-directory'\n        });\n    }\n    get type() {\n        return FileType.Folder;\n    }\n    get extension() {\n        return null;\n    }\n    get mime() {\n        return 'httpd/unix-directory';\n    }\n}\n\n/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass FileAction {\n    _action;\n    constructor(action) {\n        this.validateAction(action);\n        this._action = action;\n    }\n    get id() {\n        return this._action.id;\n    }\n    get displayName() {\n        return this._action.displayName;\n    }\n    get iconSvgInline() {\n        return this._action.iconSvgInline;\n    }\n    get enabled() {\n        return this._action.enabled;\n    }\n    get exec() {\n        return this._action.exec;\n    }\n    get execBatch() {\n        return this._action.execBatch;\n    }\n    get order() {\n        return this._action.order;\n    }\n    get default() {\n        return this._action.default;\n    }\n    get inline() {\n        return this._action.inline;\n    }\n    get renderInline() {\n        return this._action.renderInline;\n    }\n    validateAction(action) {\n        if (!action.id || typeof action.id !== 'string') {\n            throw new Error('Invalid id');\n        }\n        if (!action.displayName || typeof action.displayName !== 'function') {\n            throw new Error('Invalid displayName function');\n        }\n        if (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n            throw new Error('Invalid iconSvgInline function');\n        }\n        if (!action.exec || typeof action.exec !== 'function') {\n            throw new Error('Invalid exec function');\n        }\n        // Optional properties --------------------------------------------\n        if ('enabled' in action && typeof action.enabled !== 'function') {\n            throw new Error('Invalid enabled function');\n        }\n        if ('execBatch' in action && typeof action.execBatch !== 'function') {\n            throw new Error('Invalid execBatch function');\n        }\n        if ('order' in action && typeof action.order !== 'number') {\n            throw new Error('Invalid order');\n        }\n        if ('default' in action && typeof action.default !== 'boolean') {\n            throw new Error('Invalid default');\n        }\n        if ('inline' in action && typeof action.inline !== 'function') {\n            throw new Error('Invalid inline function');\n        }\n        if ('renderInline' in action && typeof action.renderInline !== 'function') {\n            throw new Error('Invalid renderInline function');\n        }\n    }\n}\nconst registerFileAction = function (action) {\n    if (typeof window._nc_fileactions === 'undefined') {\n        window._nc_fileactions = [];\n        logger.debug('FileActions initialized');\n    }\n    // Check duplicates\n    if (window._nc_fileactions.find(search => search.id === action.id)) {\n        logger.error(`FileAction ${action.id} already registered`, { action });\n        return;\n    }\n    window._nc_fileactions.push(action);\n};\nconst getFileActions = function () {\n    return window._nc_fileactions || [];\n};\n\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/**\n * Add a new menu entry to the upload manager menu\n */\nconst addNewFileMenuEntry = function (entry) {\n    const newFileMenu = getNewFileMenu();\n    return newFileMenu.registerEntry(entry);\n};\n/**\n * Remove a previously registered entry from the upload menu\n */\nconst removeNewFileMenuEntry = function (entry) {\n    const newFileMenu = getNewFileMenu();\n    return newFileMenu.unregisterEntry(entry);\n};\n/**\n * Get the list of registered entries from the upload menu\n *\n * @param {FileInfo} context the creation context. Usually the current folder FileInfo\n */\nconst getNewFileMenuEntries = function (context) {\n    const newFileMenu = getNewFileMenu();\n    return newFileMenu.getEntries(context);\n};\n\nexport { File, FileAction, FileType, Folder, Node, Permission, addNewFileMenuEntry, formatFileSize, getFileActions, getNewFileMenuEntries, parseWebdavPermissions, registerFileAction, removeNewFileMenuEntry };\n//# sourceMappingURL=index.esm.js.map\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport logger from '../logger';\nconst defaultDavProperties = [\n    'd:getcontentlength',\n    'd:getcontenttype',\n    'd:getetag',\n    'd:getlastmodified',\n    'd:quota-available-bytes',\n    'd:resourcetype',\n    'nc:has-preview',\n    'nc:is-encrypted',\n    'nc:mount-type',\n    'nc:share-attributes',\n    'oc:comments-unread',\n    'oc:favorite',\n    'oc:fileid',\n    'oc:owner-display-name',\n    'oc:owner-id',\n    'oc:permissions',\n    'oc:share-types',\n    'oc:size',\n    'ocs:share-permissions',\n];\nconst defaultDavNamespaces = {\n    d: 'DAV:',\n    nc: 'http://nextcloud.org/ns',\n    oc: 'http://owncloud.org/ns',\n    ocs: 'http://open-collaboration-services.org/ns',\n};\n/**\n * TODO: remove and move to @nextcloud/files\n * @param prop\n * @param namespace\n */\nexport const registerDavProperty = function (prop, namespace = { nc: 'http://nextcloud.org/ns' }) {\n    if (typeof window._nc_dav_properties === 'undefined') {\n        window._nc_dav_properties = defaultDavProperties;\n        window._nc_dav_namespaces = defaultDavNamespaces;\n    }\n    const namespaces = { ...window._nc_dav_namespaces, ...namespace };\n    // Check duplicates\n    if (window._nc_dav_properties.find(search => search === prop)) {\n        logger.error(`${prop} already registered`, { prop });\n        return;\n    }\n    if (prop.startsWith('<') || prop.split(':').length !== 2) {\n        logger.error(`${prop} is not valid. See example: 'oc:fileid'`, { prop });\n        return;\n    }\n    const ns = prop.split(':')[0];\n    if (!namespaces[ns]) {\n        logger.error(`${prop} namespace unknown`, { prop, namespaces });\n        return;\n    }\n    window._nc_dav_properties.push(prop);\n    window._nc_dav_namespaces = namespaces;\n};\n/**\n * Get the registered dav properties\n */\nexport const getDavProperties = function () {\n    if (typeof window._nc_dav_properties === 'undefined') {\n        window._nc_dav_properties = defaultDavProperties;\n    }\n    return window._nc_dav_properties.map(prop => `<${prop} />`).join(' ');\n};\n/**\n * Get the registered dav namespaces\n */\nexport const getDavNameSpaces = function () {\n    if (typeof window._nc_dav_namespaces === 'undefined') {\n        window._nc_dav_namespaces = defaultDavNamespaces;\n    }\n    return Object.keys(window._nc_dav_namespaces).map(ns => `xmlns:${ns}=\"${window._nc_dav_namespaces[ns]}\"`).join(' ');\n};\n/**\n * Get the default PROPFIND request payload\n */\nexport const getDefaultPropfind = function () {\n    return `<?xml version=\"1.0\"?>\n\t\t<d:propfind ${getDavNameSpaces()}>\n\t\t\t<d:prop>\n\t\t\t\t${getDavProperties()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`;\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { createClient } from 'webdav';\nimport { generateRemoteUrl } from '@nextcloud/router';\nimport { getCurrentUser, getRequestToken } from '@nextcloud/auth';\nexport const rootPath = `/trashbin/${getCurrentUser()?.uid}/trash`;\nexport const rootUrl = generateRemoteUrl('dav' + rootPath);\nconst client = createClient(rootUrl, {\n    headers: {\n        requesttoken: getRequestToken(),\n    },\n});\nexport default client;\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { File, Folder, parseWebdavPermissions } from '@nextcloud/files';\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router';\nimport { getDavNameSpaces, getDavProperties } from '../../../files/src/services/DavProperties';\nimport client, { rootPath } from './client';\nconst data = `<?xml version=\"1.0\"?>\n<d:propfind ${getDavNameSpaces()}>\n\t<d:prop>\n\t\t<nc:trashbin-filename />\n\t\t<nc:trashbin-deletion-time />\n\t\t<nc:trashbin-original-location />\n\t\t<nc:trashbin-title />\n\t\t${getDavProperties()}\n\t</d:prop>\n</d:propfind>`;\nconst resultToNode = function (node) {\n    const permissions = parseWebdavPermissions(node.props?.permissions);\n    const owner = getCurrentUser()?.uid;\n    const previewUrl = generateUrl('/apps/files_trashbin/preview?fileId={fileid}&x=32&y=32', node.props);\n    const nodeData = {\n        id: node.props?.fileid || 0,\n        source: generateRemoteUrl('dav' + rootPath + node.filename),\n        // do not show the mtime column\n        // mtime: new Date(node.lastmod),\n        mime: node.mime,\n        size: node.props?.size || 0,\n        permissions,\n        owner,\n        root: rootPath,\n        attributes: {\n            ...node,\n            ...node.props,\n            // Override displayed name on the list\n            displayName: node.props?.['trashbin-filename'],\n            previewUrl,\n        },\n    };\n    delete nodeData.attributes.props;\n    return node.type === 'file'\n        ? new File(nodeData)\n        : new Folder(nodeData);\n};\nexport const getContents = async (path = '/') => {\n    // TODO: use only one request when webdav-client supports it\n    // @see https://github.com/perry-mitchell/webdav-client/pull/334\n    const rootResponse = await client.stat(path, {\n        details: true,\n        data,\n    });\n    const contentsResponse = await client.getDirectoryContents(path, {\n        details: true,\n        data,\n    });\n    return {\n        folder: resultToNode(rootResponse.data),\n        contents: contentsResponse.data.map(resultToNode),\n    };\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport logger from '../logger';\nexport var DefaultType;\n(function (DefaultType) {\n    DefaultType[\"DEFAULT\"] = \"default\";\n    DefaultType[\"HIDDEN\"] = \"hidden\";\n})(DefaultType || (DefaultType = {}));\nexport class FileAction {\n    _action;\n    constructor(action) {\n        this.validateAction(action);\n        this._action = action;\n    }\n    get id() {\n        return this._action.id;\n    }\n    get displayName() {\n        return this._action.displayName;\n    }\n    get iconSvgInline() {\n        return this._action.iconSvgInline;\n    }\n    get enabled() {\n        return this._action.enabled;\n    }\n    get exec() {\n        return this._action.exec;\n    }\n    get execBatch() {\n        return this._action.execBatch;\n    }\n    get order() {\n        return this._action.order;\n    }\n    get default() {\n        return this._action.default;\n    }\n    get inline() {\n        return this._action.inline;\n    }\n    get renderInline() {\n        return this._action.renderInline;\n    }\n    validateAction(action) {\n        if (!action.id || typeof action.id !== 'string') {\n            throw new Error('Invalid id');\n        }\n        if (!action.displayName || typeof action.displayName !== 'function') {\n            throw new Error('Invalid displayName function');\n        }\n        if (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n            throw new Error('Invalid iconSvgInline function');\n        }\n        if (!action.exec || typeof action.exec !== 'function') {\n            throw new Error('Invalid exec function');\n        }\n        // Optional properties --------------------------------------------\n        if ('enabled' in action && typeof action.enabled !== 'function') {\n            throw new Error('Invalid enabled function');\n        }\n        if ('execBatch' in action && typeof action.execBatch !== 'function') {\n            throw new Error('Invalid execBatch function');\n        }\n        if ('order' in action && typeof action.order !== 'number') {\n            throw new Error('Invalid order');\n        }\n        if (action.default && !Object.values(DefaultType).includes(action.default)) {\n            throw new Error('Invalid default');\n        }\n        if ('inline' in action && typeof action.inline !== 'function') {\n            throw new Error('Invalid inline function');\n        }\n        if ('renderInline' in action && typeof action.renderInline !== 'function') {\n            throw new Error('Invalid renderInline function');\n        }\n    }\n}\nexport const registerFileAction = function (action) {\n    if (typeof window._nc_fileactions === 'undefined') {\n        window._nc_fileactions = [];\n        logger.debug('FileActions initialized');\n    }\n    // Check duplicates\n    if (window._nc_fileactions.find(search => search.id === action.id)) {\n        logger.error(`FileAction ${action.id} already registered`, { action });\n        return;\n    }\n    window._nc_fileactions.push(action);\n};\nexport const getFileActions = function () {\n    return window._nc_fileactions || [];\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { emit } from '@nextcloud/event-bus';\nimport { generateRemoteUrl } from '@nextcloud/router';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { Permission, Node } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport axios from '@nextcloud/axios';\nimport History from '@mdi/svg/svg/history.svg?raw';\nimport { registerFileAction, FileAction } from '../../../files/src/services/FileAction';\nimport logger from '../../../files/src/logger.js';\nregisterFileAction(new FileAction({\n    id: 'restore',\n    displayName() {\n        return t('files_trashbin', 'Restore');\n    },\n    iconSvgInline: () => History,\n    enabled(nodes, view) {\n        // Only available in the trashbin view\n        if (view.id !== 'trashbin') {\n            return false;\n        }\n        // Only available if all nodes have read permission\n        return nodes.length > 0 && nodes\n            .map(node => node.permissions)\n            .every(permission => (permission & Permission.READ) !== 0);\n    },\n    async exec(node) {\n        try {\n            const destination = generateRemoteUrl(`dav/trashbin/${getCurrentUser()?.uid}/restore/${node.basename}`);\n            await axios({\n                method: 'MOVE',\n                url: node.source,\n                headers: {\n                    destination,\n                },\n            });\n            // Let's pretend the file is deleted since\n            // we don't know the restored location\n            emit('files:node:deleted', node);\n            return true;\n        }\n        catch (error) {\n            logger.error(error);\n            return false;\n        }\n    },\n    async execBatch(nodes, view, dir) {\n        return Promise.all(nodes.map(node => this.exec(node, view, dir)));\n    },\n    order: 1,\n    inline: () => true,\n}));\n","import { translate as t, translate } from '@nextcloud/l10n';\nimport DeleteSvg from '@mdi/svg/svg/delete.svg?raw';\nimport moment from '@nextcloud/moment';\nimport { getContents } from './services/trashbin';\n// Register restore action\nimport './actions/restoreAction';\nconst Navigation = window.OCP.Files.Navigation;\nNavigation.register({\n    id: 'trashbin',\n    name: t('files_trashbin', 'Deleted files'),\n    caption: t('files_trashbin', 'List of files that have been deleted.'),\n    icon: DeleteSvg,\n    order: 50,\n    sticky: true,\n    defaultSortKey: 'deleted',\n    columns: [\n        {\n            id: 'deleted',\n            title: t('files_trashbin', 'Deleted'),\n            render(node) {\n                const deletionTime = node.attributes?.['trashbin-deletion-time'];\n                const span = document.createElement('span');\n                if (deletionTime) {\n                    span.title = moment.unix(deletionTime).format('LLL');\n                    span.textContent = moment.unix(deletionTime).fromNow();\n                    return span;\n                }\n                // Unknown deletion time\n                span.textContent = translate('files_trashbin', 'A long time ago');\n                return span;\n            },\n            sort(nodeA, nodeB) {\n                const deletionTimeA = nodeA.attributes?.['trashbin-deletion-time'] || nodeA?.mtime || 0;\n                const deletionTimeB = nodeB.attributes?.['trashbin-deletion-time'] || nodeB?.mtime || 0;\n                return deletionTimeB - deletionTimeA;\n            },\n        },\n    ],\n    getContents,\n});\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 5992;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t5992: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(90362)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","user","FileType","Permission","setApp","build","setUid","uid","isDavRessource","source","davService","match","validateData","data","id","Error","URL","e","startsWith","mtime","Date","crtime","mime","size","permissions","NONE","ALL","owner","attributes","root","includes","service","join","Node","_data","_attributes","_knownDavService","constructor","this","handler","set","target","prop","value","Reflect","deleteProperty","Proxy","replace","basename","extension","extname","dirname","firstMatch","indexOf","slice","length","url","pathname","undefined","READ","split","pop","path","fileid","move","destination","rename","File","type","Folder","super","getLoggerBuilder","detectUser","defaultDavProperties","defaultDavNamespaces","d","nc","oc","ocs","rootPath","concat","_getCurrentUser","getCurrentUser","rootUrl","generateRemoteUrl","createClient","headers","requesttoken","getRequestToken","window","_nc_dav_namespaces","Object","keys","map","ns","_nc_dav_properties","resultToNode","node","_node$props","_node$props2","_node$props3","_node$props4","permString","CREATE","UPDATE","DELETE","SHARE","parseWebdavPermissions","props","previewUrl","generateUrl","nodeData","filename","displayName","DefaultType","action","validateAction","_action","iconSvgInline","enabled","exec","execBatch","order","default","inline","renderInline","values","t","nodes","view","every","permission","async","axios","method","emit","error","logger","dir","Promise","all","_nc_fileactions","debug","find","search","push","OCP","Files","Navigation","register","name","caption","icon","sticky","defaultSortKey","columns","title","render","_node$attributes","deletionTime","span","document","createElement","moment","format","textContent","fromNow","translate","sort","nodeA","nodeB","_nodeA$attributes","_nodeB$attributes","deletionTimeA","getContents","arguments","rootResponse","client","stat","details","contentsResponse","getDirectoryContents","folder","contents","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","key","splice","r","n","getter","__esModule","a","definition","defineProperty","enumerable","get","g","globalThis","Function","obj","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","__webpack_exports__"],"sourceRoot":""}