From c8be52bc16085fe610e2a35be91b9e680ebd9990 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 12 Jan 2024 16:57:21 +0100 Subject: [PATCH 1/2] actually throttle restore Signed-off-by: Robin Appelman --- apps/files_trashbin/src/filelist.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_trashbin/src/filelist.js b/apps/files_trashbin/src/filelist.js index 79f06d2416a49..9e2109c03db1b 100644 --- a/apps/files_trashbin/src/filelist.js +++ b/apps/files_trashbin/src/filelist.js @@ -193,7 +193,7 @@ import PQueue from 'p-queue' this.fileMultiSelectMenu.toggleLoading('restore', true) var restorePromises = files.map(function(file) { return self.deleteOperationQueue.add(async () => { - self.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true) + await self.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true) self._removeCallback([file]) }) }) From ff2a2c4a670a22cc7191978feb45890fcea2bc3c Mon Sep 17 00:00:00 2001 From: nextcloud-command Date: Fri, 12 Jan 2024 18:43:39 +0000 Subject: [PATCH 2/2] chore(assets): Recompile assets Signed-off-by: nextcloud-command --- dist/files_trashbin-files_trashbin.js | 4 ++-- dist/files_trashbin-files_trashbin.js.map | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/files_trashbin-files_trashbin.js b/dist/files_trashbin-files_trashbin.js index 920830b7eb9fd..0247d8effd78e 100644 --- a/dist/files_trashbin-files_trashbin.js +++ b/dist/files_trashbin-files_trashbin.js @@ -1,3 +1,3 @@ /*! For license information please see files_trashbin-files_trashbin.js.LICENSE.txt */ -!function(){var e,i={6564:function(){OCA.Trashbin={},OCA.Trashbin.App={_initialized:!1,client:null,initialize:function(e){if(!this._initialized){this._initialized=!0,this.client=new OC.Files.Client({host:OC.getHost(),port:OC.getPort(),root:OC.linkToRemoteBase("dav")+"/trashbin/"+OC.getCurrentUser().uid,useHTTPS:"https"===OC.getProtocol()});var i=OC.Util.History.parseUrlQuery();this.fileList=new OCA.Trashbin.FileList($("#app-content-trashbin"),{fileActions:this._createFileActions(),detailsViewEnabled:!1,scrollTo:i.scrollto,config:OCA.Files.App.getFilesConfig(),multiSelectMenu:[{name:"restore",displayName:t("files_trashbin","Restore"),iconClass:"icon-history"},{name:"delete",displayName:t("files_trashbin","Delete permanently"),iconClass:"icon-delete"}],client:this.client,shown:!0})}},_createFileActions:function(){var e=this.client,i=new OCA.Files.FileActions;return i.register("dir","Open",OC.PERMISSION_READ,"",(function(e,t){var i=t.fileList.getCurrentDirectory();t.fileList.changeDirectory(OC.joinPaths(i,e))})),i.setDefault("dir","Open"),i.registerAction({name:"Restore",displayName:t("files_trashbin","Restore"),type:OCA.Files.FileActions.TYPE_INLINE,mime:"all",permissions:OC.PERMISSION_READ,iconClass:"icon-history",actionHandler:function(i,n){var r=n.fileList,a=r.findFileEl(i);r.showFileBusyState(a,!0);var o=n.fileList.getCurrentDirectory();e.move(OC.joinPaths("trash",o,i),OC.joinPaths("restore",i),!0).then(r._removeCallback.bind(r,[i]),(function(){r.showFileBusyState(a,!1),OC.Notification.show(t("files_trashbin","Error while restoring file from trash bin"))}))}}),i.registerAction({name:"Delete",displayName:t("files_trashbin","Delete permanently"),mime:"all",permissions:OC.PERMISSION_READ,iconClass:"icon-delete",render:function(e,n,r){var a=i._makeActionLink(e,r);return a.attr("original-title",t("files_trashbin","Delete permanently")),a.children("img").attr("alt",t("files_trashbin","Delete permanently")),r.$file.find("td:last").append(a),a},actionHandler:function(i,n){var r=n.fileList;$(".tipsy").remove();var a=r.findFileEl(i);r.showFileBusyState(a,!0);var o=n.fileList.getCurrentDirectory();e.remove(OC.joinPaths("trash",o,i)).then(r._removeCallback.bind(r,[i]),(function(){r.showFileBusyState(a,!1),OC.Notification.show(t("files_trashbin","Error while removing file from trash bin"))}))}}),i}},window.addEventListener("DOMContentLoaded",(function(){$("#app-content-trashbin").one("show",(function(){OCA.Trashbin.App.initialize($("#app-content-trashbin"))}))}))},27262:function(e,i,n){"use strict";n(6564);var r=n(25746);function a(e,t,i,n,r,a,o){try{var s=e[a](o),l=s.value}catch(e){return void i(e)}s.done?t(l):Promise.resolve(l).then(n,r)}function o(e){return function(){var t=this,i=arguments;return new Promise((function(n,r){var o=e.apply(t,i);function s(e){a(o,n,r,s,l,"next",e)}function l(e){a(o,n,r,s,l,"throw",e)}s(void 0)}))}}!function(){var e=new RegExp(/^(.+)\.d[0-9]+$/),i="{http://nextcloud.org/ns}trashbin-filename",n="{http://nextcloud.org/ns}trashbin-deletion-time",a="{http://nextcloud.org/ns}trashbin-original-location",s="{http://nextcloud.org/ns}trashbin-title";function l(t){t=OC.basename(t);var i=e.exec(t);return i&&i.length>1&&(t=i[1]),t}var c=function(e,t){this.client=t.client,this.initialize(e,t),this.deleteOperationQueue=new r.Z({concurrency:4})};c.prototype=_.extend({},OCA.Files.FileList.prototype,{id:"trashbin",appName:t("files_trashbin","Deleted files"),client:null,initialize:function(){this.client.addFileInfoParser((function(e,t){var r=e.propStat[0].properties,o=r[a],l=r[s];return{displayName:r[i],mtime:1e3*parseInt(r[n],10),hasPreview:!0,path:o,extraData:l}}));var e=OCA.Files.FileList.prototype.initialize.apply(this,arguments);return this.$el.find(".undelete").click("click",_.bind(this._onClickRestoreSelected,this)),this.setSort("mtime","desc"),this.breadcrumb._makeCrumbs=function(){for(var e=OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this,[].concat(Array.prototype.slice.call(arguments),["icon-delete no-hover"])),t=1;t=a)&&Object.keys(r.O).every((function(e){return r.O[e](i[l])}))?i.splice(l--,1):(s=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[i,n,a]},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},r.j=2325,function(){r.b=document.baseURI||self.location.href;var e={2325:0};r.O.j=function(t){return 0===e[t]};var t=function(t,i){var n,a,o=i[0],s=i[1],l=i[2],c=0;if(o.some((function(t){return 0!==e[t]}))){for(n in s)r.o(s,n)&&(r.m[n]=s[n]);if(l)var u=l(r)}for(t&&t(i);c1&&(t=i[1]),t}var c=function(e,t){this.client=t.client,this.initialize(e,t),this.deleteOperationQueue=new r.Z({concurrency:4})};c.prototype=_.extend({},OCA.Files.FileList.prototype,{id:"trashbin",appName:t("files_trashbin","Deleted files"),client:null,initialize:function(){this.client.addFileInfoParser((function(e,t){var r=e.propStat[0].properties,o=r[a],l=r[s];return{displayName:r[i],mtime:1e3*parseInt(r[n],10),hasPreview:!0,path:o,extraData:l}}));var e=OCA.Files.FileList.prototype.initialize.apply(this,arguments);return this.$el.find(".undelete").click("click",_.bind(this._onClickRestoreSelected,this)),this.setSort("mtime","desc"),this.breadcrumb._makeCrumbs=function(){for(var e=OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this,[].concat(Array.prototype.slice.call(arguments),["icon-delete no-hover"])),t=1;t=a)&&Object.keys(r.O).every((function(e){return r.O[e](i[l])}))?i.splice(l--,1):(s=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[i,n,a]},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},r.j=2325,function(){r.b=document.baseURI||self.location.href;var e={2325:0};r.O.j=function(t){return 0===e[t]};var t=function(t,i){var n,a,o=i[0],s=i[1],l=i[2],c=0;if(o.some((function(t){return 0!==e[t]}))){for(n in s)r.o(s,n)&&(r.m[n]=s[n]);if(l)var u=l(r)}for(t&&t(i);c 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(function(key) { return __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};","/**\n * Copyright (c) 2014\n *\n * @author Abijeet \n * @author Christoph Wurst \n * @author Daniel Calviño Sánchez \n * @author Joas Schilling \n * @author John Molakvoæ \n * @author Robin Appelman \n * @author Roeland Jago Douma \n * @author Vincent Petry \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 .\n *\n */\n\nOCA.Trashbin = {}\n/**\n * @namespace OCA.Trashbin.App\n */\nOCA.Trashbin.App = {\n\t_initialized: false,\n\t/** @type {OC.Files.Client} */\n\tclient: null,\n\n\tinitialize($el) {\n\t\tif (this._initialized) {\n\t\t\treturn\n\t\t}\n\t\tthis._initialized = true\n\n\t\tthis.client = new OC.Files.Client({\n\t\t\thost: OC.getHost(),\n\t\t\tport: OC.getPort(),\n\t\t\troot: OC.linkToRemoteBase('dav') + '/trashbin/' + OC.getCurrentUser().uid,\n\t\t\tuseHTTPS: OC.getProtocol() === 'https',\n\t\t})\n\t\tconst urlParams = OC.Util.History.parseUrlQuery()\n\t\tthis.fileList = new OCA.Trashbin.FileList(\n\t\t\t$('#app-content-trashbin'), {\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tdetailsViewEnabled: false,\n\t\t\t\tscrollTo: urlParams.scrollto,\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\tmultiSelectMenu: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'restore',\n\t\t\t\t\t\tdisplayName: t('files_trashbin', 'Restore'),\n\t\t\t\t\t\ticonClass: 'icon-history',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'delete',\n\t\t\t\t\t\tdisplayName: t('files_trashbin', 'Delete permanently'),\n\t\t\t\t\t\ticonClass: 'icon-delete',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tclient: this.client,\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true,\n\t\t\t}\n\t\t)\n\t},\n\n\t_createFileActions() {\n\t\tconst client = this.client\n\t\tconst fileActions = new OCA.Files.FileActions()\n\t\tfileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function(filename, context) {\n\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\tcontext.fileList.changeDirectory(OC.joinPaths(dir, filename))\n\t\t})\n\n\t\tfileActions.setDefault('dir', 'Open')\n\n\t\tfileActions.registerAction({\n\t\t\tname: 'Restore',\n\t\t\tdisplayName: t('files_trashbin', 'Restore'),\n\t\t\ttype: OCA.Files.FileActions.TYPE_INLINE,\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\ticonClass: 'icon-history',\n\t\t\tactionHandler(filename, context) {\n\t\t\t\tconst fileList = context.fileList\n\t\t\t\tconst tr = fileList.findFileEl(filename)\n\t\t\t\tfileList.showFileBusyState(tr, true)\n\t\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\t\tclient.move(OC.joinPaths('trash', dir, filename), OC.joinPaths('restore', filename), true)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfileList._removeCallback.bind(fileList, [filename]),\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tfileList.showFileBusyState(tr, false)\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while restoring file from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t},\n\t\t})\n\n\t\tfileActions.registerAction({\n\t\t\tname: 'Delete',\n\t\t\tdisplayName: t('files_trashbin', 'Delete permanently'),\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\ticonClass: 'icon-delete',\n\t\t\trender(actionSpec, isDefault, context) {\n\t\t\t\tconst $actionLink = fileActions._makeActionLink(actionSpec, context)\n\t\t\t\t$actionLink.attr('original-title', t('files_trashbin', 'Delete permanently'))\n\t\t\t\t$actionLink.children('img').attr('alt', t('files_trashbin', 'Delete permanently'))\n\t\t\t\tcontext.$file.find('td:last').append($actionLink)\n\t\t\t\treturn $actionLink\n\t\t\t},\n\t\t\tactionHandler(filename, context) {\n\t\t\t\tconst fileList = context.fileList\n\t\t\t\t$('.tipsy').remove()\n\t\t\t\tconst tr = fileList.findFileEl(filename)\n\t\t\t\tfileList.showFileBusyState(tr, true)\n\t\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\t\tclient.remove(OC.joinPaths('trash', dir, filename))\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfileList._removeCallback.bind(fileList, [filename]),\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tfileList.showFileBusyState(tr, false)\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while removing file from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t},\n\t\t})\n\t\treturn fileActions\n\t},\n}\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\t$('#app-content-trashbin').one('show', function() {\n\t\tconst App = OCA.Trashbin.App\n\t\tApp.initialize($('#app-content-trashbin'))\n\t\t// force breadcrumb init\n\t\t// App.fileList.changeDirectory(App.fileList.getCurrentDirectory(), false, true);\n\t})\n})\n","/**\n * Copyright (c) 2014\n *\n * @author Azul \n * @author Gary Kim \n * @author Jan C. Borchardt \n * @author John Molakvoæ \n * @author Robin Appelman \n * @author Vincent Petry \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 .\n *\n */\n\n// eslint-disable-next-line import/no-unresolved, node/no-missing-import\nimport PQueue from 'p-queue'\n\n/* eslint-disable */\n(function() {\n\tvar DELETED_REGEXP = new RegExp(/^(.+)\\.d[0-9]+$/)\n\tvar FILENAME_PROP = '{http://nextcloud.org/ns}trashbin-filename'\n\tvar DELETION_TIME_PROP = '{http://nextcloud.org/ns}trashbin-deletion-time'\n\tvar TRASHBIN_ORIGINAL_LOCATION = '{http://nextcloud.org/ns}trashbin-original-location'\n\tvar TRASHBIN_TITLE = '{http://nextcloud.org/ns}trashbin-title'\n\n\t/**\n\t * Convert a file name in the format filename.d12345 to the real file name.\n\t * This will use basename.\n\t * The name will not be changed if it has no \".d12345\" suffix.\n\t * @param {String} name file name\n\t * @returns {String} converted file name\n\t */\n\tfunction getDeletedFileName(name) {\n\t\tname = OC.basename(name)\n\t\tvar match = DELETED_REGEXP.exec(name)\n\t\tif (match && match.length > 1) {\n\t\t\tname = match[1]\n\t\t}\n\t\treturn name\n\t}\n\n\t/**\n\t * @class OCA.Trashbin.FileList\n\t * @augments OCA.Files.FileList\n\t * @classdesc List of deleted files\n\t *\n\t * @param $el container element with existing markup for the .files-controls\n\t * and a table\n\t * @param [options] map of options\n\t */\n\tvar FileList = function($el, options) {\n\t\tthis.client = options.client\n\t\tthis.initialize($el, options)\n\t\tthis.deleteOperationQueue = new PQueue({ concurrency: 4 })\n\t}\n\tFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,\n\t\t/** @lends OCA.Trashbin.FileList.prototype */ {\n\t\tid: 'trashbin',\n\t\tappName: t('files_trashbin', 'Deleted files'),\n\t\t/** @type {OC.Files.Client} */\n\t\tclient: null,\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinitialize: function() {\n\t\t\tthis.client.addFileInfoParser(function(response, data) {\n\t\t\t\tvar props = response.propStat[0].properties\n\t\t\t\tvar path = props[TRASHBIN_ORIGINAL_LOCATION]\n\t\t\t\tvar title = props[TRASHBIN_TITLE]\n\t\t\t\treturn {\n\t\t\t\t\tdisplayName: props[FILENAME_PROP],\n\t\t\t\t\tmtime: parseInt(props[DELETION_TIME_PROP], 10) * 1000,\n\t\t\t\t\thasPreview: true,\n\t\t\t\t\tpath: path,\n\t\t\t\t\textraData: title\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tvar result = OCA.Files.FileList.prototype.initialize.apply(this, arguments)\n\t\t\tthis.$el.find('.undelete').click('click', _.bind(this._onClickRestoreSelected, this))\n\n\t\t\t// Sort by most recently deleted first\n\t\t\tthis.setSort('mtime', 'desc')\n\n\t\t\t/**\n\t\t\t * Override crumb making to add \"Deleted Files\" entry\n\t\t\t * and convert files with \".d\" extensions to a more\n\t\t\t * user friendly name.\n\t\t\t */\n\t\t\t\tthis.breadcrumb._makeCrumbs = function() {\n\t\t\t\t\tvar parts = OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this, [...arguments, 'icon-delete no-hover'])\n\t\t\t\t\tfor (var i = 1; i < parts.length; i++) {\n\t\t\t\t\t\tparts[i].name = getDeletedFileName(parts[i].name)\n\t\t\t\t\t}\n\t\t\t\t\treturn parts\n\t\t\t\t}\n\n\t\t\t\tOC.Plugins.attach('OCA.Trashbin.FileList', this)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\t/**\n\t\t * Override to only return read permissions\n\t\t */\n\t\t\tgetDirectoryPermissions: function() {\n\t\t\t\treturn OC.PERMISSION_READ | OC.PERMISSION_DELETE\n\t\t\t},\n\n\t\t\t_setCurrentDir: function(targetDir) {\n\t\t\t\tOCA.Files.FileList.prototype._setCurrentDir.apply(this, arguments)\n\n\t\t\t\tvar baseDir = OC.basename(targetDir)\n\t\t\t\tif (baseDir !== '') {\n\t\t\t\t\tthis.setPageTitle(getDeletedFileName(baseDir))\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_createRow: function() {\n\t\t\t// FIXME: MEGAHACK until we find a better solution\n\t\t\t\tvar tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments)\n\t\t\t\ttr.find('td.filesize').remove()\n\t\t\t\treturn tr\n\t\t\t},\n\n\t\t\tgetAjaxUrl: function(action, params) {\n\t\t\t\tvar q = ''\n\t\t\t\tif (params) {\n\t\t\t\t\tq = '?' + OC.buildQueryString(params)\n\t\t\t\t}\n\t\t\t\treturn OC.filePath('files_trashbin', 'ajax', action + '.php') + q\n\t\t\t},\n\n\t\t\tsetupUploadEvents: function() {\n\t\t\t// override and do nothing\n\t\t\t},\n\n\t\t\tlinkTo: function(dir) {\n\t\t\t\treturn OC.linkTo('files', 'index.php') + '?view=trashbin&dir=' + encodeURIComponent(dir).replace(/%2F/g, '/')\n\t\t\t},\n\n\t\t\telementToFile: function($el) {\n\t\t\t\tvar fileInfo = OCA.Files.FileList.prototype.elementToFile($el)\n\t\t\t\tif (this.getCurrentDirectory() === '/') {\n\t\t\t\t\tfileInfo.displayName = getDeletedFileName(fileInfo.name)\n\t\t\t\t}\n\t\t\t\t// no size available\n\t\t\t\tdelete fileInfo.size\n\t\t\t\treturn fileInfo\n\t\t\t},\n\n\t\t\tupdateEmptyContent: function() {\n\t\t\t\tvar exists = this.$fileList.find('tr:first').exists()\n\t\t\t\tthis.$el.find('.emptyfilelist.emptycontent').toggleClass('hidden', exists)\n\t\t\t\tthis.$el.find('.files-filestable th').toggleClass('hidden', !exists)\n\t\t\t},\n\n\t\t\t_removeCallback: function(files) {\n\t\t\t\tvar $el\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\t$el = this.remove(OC.basename(files[i]), { updateSummary: false })\n\t\t\t\t\t// Only remove element if already loaded (might be unloaded if scrollable list)\n\t\t\t\t\tif ($el) {\n\t\t\t\t\t\tthis.fileSummary.remove({ type: $el.attr('data-type'), size: $el.attr('data-size') })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.fileSummary.update()\n\t\t\t\tthis.updateEmptyContent()\n\t\t\t},\n\n\t\t\t_onClickRestoreSelected: function(event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvar self = this\n\t\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name')\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\tvar tr = this.findFileEl(files[i])\n\t\t\t\t\tthis.showFileBusyState(tr, true)\n\t\t\t\t}\n\n\t\t\t\tthis.fileMultiSelectMenu.toggleLoading('restore', true)\n\t\t\t\tvar restorePromises = files.map(function(file) {\n\t\t\t\t\treturn self.deleteOperationQueue.add(async () => {\n\t\t\t\t\t\tself.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true)\n\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\treturn Promise.all(restorePromises).then(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('restore', false)\n\t\t\t\t\t},\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while restoring files from trash bin'))\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t},\n\n\t\t\t_onClickDeleteSelected: function(event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvar self = this\n\t\t\t\tvar allFiles = this.$el.find('.select-all').is(':checked')\n\t\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name')\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\tvar tr = this.findFileEl(files[i])\n\t\t\t\t\tthis.showFileBusyState(tr, true)\n\t\t\t\t}\n\n\t\t\t\tif (allFiles) {\n\t\t\t\t\treturn this.client.remove(OC.joinPaths('trash', this.getCurrentDirectory()))\n\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tself.hideMask()\n\t\t\t\t\t\t\t\tself.setFiles([])\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while emptying trash bin'))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tthis.fileMultiSelectMenu.toggleLoading('delete', true)\n\t\t\t\t\tvar deletePromises = files.map(function(file) {\n\t\t\t\t\t\treturn self.deleteOperationQueue.add(async () => {\n\t\t\t\t\t\t\tawait self.client.remove(OC.joinPaths('trash', self.getCurrentDirectory(), file))\n\t\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\treturn Promise.all(deletePromises).then(\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('delete', false)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while removing files from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_onClickFile: function(event) {\n\t\t\t\tvar mime = $(this).parent().parent().data('mime')\n\t\t\t\tif (mime !== 'httpd/unix-directory') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t}\n\t\t\t\treturn OCA.Files.FileList.prototype._onClickFile.apply(this, arguments)\n\t\t\t},\n\n\t\t\tgeneratePreviewUrl: function(urlSpec) {\n\t\t\t\treturn OC.generateUrl('/apps/files_trashbin/preview?') + $.param(urlSpec)\n\t\t\t},\n\n\t\t\tgetDownloadUrl: function() {\n\t\t\t// no downloads\n\t\t\t\treturn '#'\n\t\t\t},\n\n\t\t\tgetDefaultActionUrl: function() {\n\t\t\t// no default action\n\t\t\t\treturn '#'\n\t\t\t},\n\n\t\t\tupdateStorageStatistics: function() {\n\t\t\t// no op because the trashbin doesn't have\n\t\t\t// storage info like free space / used space\n\t\t\t},\n\n\t\t\tisSelectedDeletable: function() {\n\t\t\t\treturn true\n\t\t\t},\n\n\t\t\t/**\n\t\t * Returns list of webdav properties to request\n\t\t */\n\t\t\t_getWebdavProperties: function() {\n\t\t\t\treturn [FILENAME_PROP, DELETION_TIME_PROP, TRASHBIN_ORIGINAL_LOCATION, TRASHBIN_TITLE].concat(this.filesClient.getPropfindProperties())\n\t\t\t},\n\n\t\t\t/**\n\t\t * Reloads the file list using ajax call\n\t\t *\n\t\t * @returns ajax call object\n\t\t */\n\t\t\treload: function() {\n\t\t\t\tthis._selectedFiles = {}\n\t\t\t\tthis._selectionSummary.clear()\n\t\t\t\tthis.$el.find('.select-all').prop('checked', false)\n\t\t\t\tthis.showMask()\n\t\t\t\tif (this._reloadCall?.abort) {\n\t\t\t\t\tthis._reloadCall.abort()\n\t\t\t\t}\n\t\t\t\tthis._reloadCall = this.client.getFolderContents(\n\t\t\t\t\t'trash/' + this.getCurrentDirectory(), {\n\t\t\t\t\t\tincludeParent: false,\n\t\t\t\t\t\tproperties: this._getWebdavProperties()\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\tvar callBack = this.reloadCallback.bind(this)\n\t\t\t\treturn this._reloadCall.then(callBack, callBack)\n\t\t\t},\n\t\t\treloadCallback: function(status, result) {\n\t\t\t\tdelete this._reloadCall\n\t\t\t\tthis.hideMask()\n\n\t\t\t\tif (status === 401) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Firewall Blocked request?\n\t\t\t\tif (status === 403) {\n\t\t\t\t// Go home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\tOC.Notification.show(t('files', 'This operation is forbidden'))\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Did share service die or something else fail?\n\t\t\t\tif (status === 500) {\n\t\t\t\t// Go home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\tOC.Notification.show(t('files', 'This directory is unavailable, please check the logs or contact the administrator'))\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tif (status === 404) {\n\t\t\t\t// go back home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\t// aborted ?\n\t\t\t\tif (status === 0) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\tthis.setFiles(result)\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t})\n\n\tOCA.Trashbin.FileList = FileList\n})()\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./trash.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./trash.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @copyright Copyright (c) 2016 Roeland Jago Douma \n *\n * @author Roeland Jago Douma \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 .\n *\n */\n\nimport './app'\nimport './filelist'\nimport './trash.scss'\n\nwindow.OCA.Trashbin = OCA.Trashbin\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-content-trashbin tbody tr[data-type=file] td a.name,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext span{cursor:default}#app-content-trashbin .summary :last-child{padding:0}#app-content-trashbin .files-filestable .summary .filesize{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_trashbin/src/trash.scss\"],\"names\":[],\"mappings\":\"AASA,4MAGC,cAAA,CAGD,2CACC,SAAA,CAED,2DACC,YAAA\",\"sourcesContent\":[\"/*\\n * Copyright (c) 2014\\n *\\n * This file is licensed under the Affero General Public License version 3\\n * or later.\\n *\\n * See the COPYING-README file.\\n *\\n */\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext span {\\n\\tcursor: default;\\n}\\n\\n#app-content-trashbin .summary :last-child {\\n\\tpadding: 0;\\n}\\n#app-content-trashbin .files-filestable .summary .filesize {\\n\\tdisplay: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// 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 = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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 = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2325;","__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\t2325: 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 = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(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(function(id) { return 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], function() { return __webpack_require__(27262); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","OCA","Trashbin","App","_initialized","client","initialize","$el","this","OC","Files","Client","host","getHost","port","getPort","root","linkToRemoteBase","getCurrentUser","uid","useHTTPS","getProtocol","urlParams","Util","History","parseUrlQuery","fileList","FileList","$","fileActions","_createFileActions","detailsViewEnabled","scrollTo","scrollto","config","getFilesConfig","multiSelectMenu","name","displayName","t","iconClass","shown","FileActions","register","PERMISSION_READ","filename","context","dir","getCurrentDirectory","changeDirectory","joinPaths","setDefault","registerAction","type","TYPE_INLINE","mime","permissions","actionHandler","tr","findFileEl","showFileBusyState","move","then","_removeCallback","bind","Notification","show","render","actionSpec","isDefault","$actionLink","_makeActionLink","attr","children","$file","find","append","remove","window","addEventListener","one","DELETED_REGEXP","RegExp","FILENAME_PROP","DELETION_TIME_PROP","TRASHBIN_ORIGINAL_LOCATION","TRASHBIN_TITLE","getDeletedFileName","basename","match","exec","length","options","deleteOperationQueue","PQueue","concurrency","prototype","_","extend","id","appName","addFileInfoParser","response","data","props","propStat","properties","path","title","mtime","parseInt","hasPreview","extraData","result","apply","arguments","click","_onClickRestoreSelected","setSort","breadcrumb","_makeCrumbs","parts","BreadCrumb","i","Plugins","attach","getDirectoryPermissions","PERMISSION_DELETE","_setCurrentDir","targetDir","baseDir","setPageTitle","_createRow","getAjaxUrl","action","params","q","buildQueryString","filePath","setupUploadEvents","linkTo","encodeURIComponent","replace","elementToFile","fileInfo","size","updateEmptyContent","exists","$fileList","toggleClass","files","updateSummary","fileSummary","update","event","preventDefault","self","pluck","getSelectedFiles","fileMultiSelectMenu","toggleLoading","restorePromises","map","file","add","Promise","all","_onClickDeleteSelected","allFiles","is","hideMask","setFiles","deletePromises","_onClickFile","parent","generatePreviewUrl","urlSpec","generateUrl","param","getDownloadUrl","getDefaultActionUrl","updateStorageStatistics","isSelectedDeletable","_getWebdavProperties","concat","filesClient","getPropfindProperties","reload","_selectedFiles","_selectionSummary","clear","prop","showMask","_reloadCall","abort","getFolderContents","includeParent","callBack","reloadCallback","status","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","b","document","baseURI","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"files_trashbin-files_trashbin.js?v=28f7cb3c404ea4057445","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files_trashbin/src/app.js","webpack:///nextcloud/apps/files_trashbin/src/filelist.js","webpack://nextcloud/./apps/files_trashbin/src/trash.scss?cfe4","webpack:///nextcloud/apps/files_trashbin/src/files_trashbin.js","webpack:///nextcloud/apps/files_trashbin/src/trash.scss","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 = function(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(function(key) { return __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};","/**\n * Copyright (c) 2014\n *\n * @author Abijeet \n * @author Christoph Wurst \n * @author Daniel Calviño Sánchez \n * @author Joas Schilling \n * @author John Molakvoæ \n * @author Robin Appelman \n * @author Roeland Jago Douma \n * @author Vincent Petry \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 .\n *\n */\n\nOCA.Trashbin = {}\n/**\n * @namespace OCA.Trashbin.App\n */\nOCA.Trashbin.App = {\n\t_initialized: false,\n\t/** @type {OC.Files.Client} */\n\tclient: null,\n\n\tinitialize($el) {\n\t\tif (this._initialized) {\n\t\t\treturn\n\t\t}\n\t\tthis._initialized = true\n\n\t\tthis.client = new OC.Files.Client({\n\t\t\thost: OC.getHost(),\n\t\t\tport: OC.getPort(),\n\t\t\troot: OC.linkToRemoteBase('dav') + '/trashbin/' + OC.getCurrentUser().uid,\n\t\t\tuseHTTPS: OC.getProtocol() === 'https',\n\t\t})\n\t\tconst urlParams = OC.Util.History.parseUrlQuery()\n\t\tthis.fileList = new OCA.Trashbin.FileList(\n\t\t\t$('#app-content-trashbin'), {\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tdetailsViewEnabled: false,\n\t\t\t\tscrollTo: urlParams.scrollto,\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\tmultiSelectMenu: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'restore',\n\t\t\t\t\t\tdisplayName: t('files_trashbin', 'Restore'),\n\t\t\t\t\t\ticonClass: 'icon-history',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'delete',\n\t\t\t\t\t\tdisplayName: t('files_trashbin', 'Delete permanently'),\n\t\t\t\t\t\ticonClass: 'icon-delete',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tclient: this.client,\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true,\n\t\t\t}\n\t\t)\n\t},\n\n\t_createFileActions() {\n\t\tconst client = this.client\n\t\tconst fileActions = new OCA.Files.FileActions()\n\t\tfileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function(filename, context) {\n\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\tcontext.fileList.changeDirectory(OC.joinPaths(dir, filename))\n\t\t})\n\n\t\tfileActions.setDefault('dir', 'Open')\n\n\t\tfileActions.registerAction({\n\t\t\tname: 'Restore',\n\t\t\tdisplayName: t('files_trashbin', 'Restore'),\n\t\t\ttype: OCA.Files.FileActions.TYPE_INLINE,\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\ticonClass: 'icon-history',\n\t\t\tactionHandler(filename, context) {\n\t\t\t\tconst fileList = context.fileList\n\t\t\t\tconst tr = fileList.findFileEl(filename)\n\t\t\t\tfileList.showFileBusyState(tr, true)\n\t\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\t\tclient.move(OC.joinPaths('trash', dir, filename), OC.joinPaths('restore', filename), true)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfileList._removeCallback.bind(fileList, [filename]),\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tfileList.showFileBusyState(tr, false)\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while restoring file from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t},\n\t\t})\n\n\t\tfileActions.registerAction({\n\t\t\tname: 'Delete',\n\t\t\tdisplayName: t('files_trashbin', 'Delete permanently'),\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\ticonClass: 'icon-delete',\n\t\t\trender(actionSpec, isDefault, context) {\n\t\t\t\tconst $actionLink = fileActions._makeActionLink(actionSpec, context)\n\t\t\t\t$actionLink.attr('original-title', t('files_trashbin', 'Delete permanently'))\n\t\t\t\t$actionLink.children('img').attr('alt', t('files_trashbin', 'Delete permanently'))\n\t\t\t\tcontext.$file.find('td:last').append($actionLink)\n\t\t\t\treturn $actionLink\n\t\t\t},\n\t\t\tactionHandler(filename, context) {\n\t\t\t\tconst fileList = context.fileList\n\t\t\t\t$('.tipsy').remove()\n\t\t\t\tconst tr = fileList.findFileEl(filename)\n\t\t\t\tfileList.showFileBusyState(tr, true)\n\t\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\t\tclient.remove(OC.joinPaths('trash', dir, filename))\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfileList._removeCallback.bind(fileList, [filename]),\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tfileList.showFileBusyState(tr, false)\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while removing file from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t},\n\t\t})\n\t\treturn fileActions\n\t},\n}\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\t$('#app-content-trashbin').one('show', function() {\n\t\tconst App = OCA.Trashbin.App\n\t\tApp.initialize($('#app-content-trashbin'))\n\t\t// force breadcrumb init\n\t\t// App.fileList.changeDirectory(App.fileList.getCurrentDirectory(), false, true);\n\t})\n})\n","/**\n * Copyright (c) 2014\n *\n * @author Azul \n * @author Gary Kim \n * @author Jan C. Borchardt \n * @author John Molakvoæ \n * @author Robin Appelman \n * @author Vincent Petry \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 .\n *\n */\n\n// eslint-disable-next-line import/no-unresolved, node/no-missing-import\nimport PQueue from 'p-queue'\n\n/* eslint-disable */\n(function() {\n\tvar DELETED_REGEXP = new RegExp(/^(.+)\\.d[0-9]+$/)\n\tvar FILENAME_PROP = '{http://nextcloud.org/ns}trashbin-filename'\n\tvar DELETION_TIME_PROP = '{http://nextcloud.org/ns}trashbin-deletion-time'\n\tvar TRASHBIN_ORIGINAL_LOCATION = '{http://nextcloud.org/ns}trashbin-original-location'\n\tvar TRASHBIN_TITLE = '{http://nextcloud.org/ns}trashbin-title'\n\n\t/**\n\t * Convert a file name in the format filename.d12345 to the real file name.\n\t * This will use basename.\n\t * The name will not be changed if it has no \".d12345\" suffix.\n\t * @param {String} name file name\n\t * @returns {String} converted file name\n\t */\n\tfunction getDeletedFileName(name) {\n\t\tname = OC.basename(name)\n\t\tvar match = DELETED_REGEXP.exec(name)\n\t\tif (match && match.length > 1) {\n\t\t\tname = match[1]\n\t\t}\n\t\treturn name\n\t}\n\n\t/**\n\t * @class OCA.Trashbin.FileList\n\t * @augments OCA.Files.FileList\n\t * @classdesc List of deleted files\n\t *\n\t * @param $el container element with existing markup for the .files-controls\n\t * and a table\n\t * @param [options] map of options\n\t */\n\tvar FileList = function($el, options) {\n\t\tthis.client = options.client\n\t\tthis.initialize($el, options)\n\t\tthis.deleteOperationQueue = new PQueue({ concurrency: 4 })\n\t}\n\tFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,\n\t\t/** @lends OCA.Trashbin.FileList.prototype */ {\n\t\tid: 'trashbin',\n\t\tappName: t('files_trashbin', 'Deleted files'),\n\t\t/** @type {OC.Files.Client} */\n\t\tclient: null,\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinitialize: function() {\n\t\t\tthis.client.addFileInfoParser(function(response, data) {\n\t\t\t\tvar props = response.propStat[0].properties\n\t\t\t\tvar path = props[TRASHBIN_ORIGINAL_LOCATION]\n\t\t\t\tvar title = props[TRASHBIN_TITLE]\n\t\t\t\treturn {\n\t\t\t\t\tdisplayName: props[FILENAME_PROP],\n\t\t\t\t\tmtime: parseInt(props[DELETION_TIME_PROP], 10) * 1000,\n\t\t\t\t\thasPreview: true,\n\t\t\t\t\tpath: path,\n\t\t\t\t\textraData: title\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tvar result = OCA.Files.FileList.prototype.initialize.apply(this, arguments)\n\t\t\tthis.$el.find('.undelete').click('click', _.bind(this._onClickRestoreSelected, this))\n\n\t\t\t// Sort by most recently deleted first\n\t\t\tthis.setSort('mtime', 'desc')\n\n\t\t\t/**\n\t\t\t * Override crumb making to add \"Deleted Files\" entry\n\t\t\t * and convert files with \".d\" extensions to a more\n\t\t\t * user friendly name.\n\t\t\t */\n\t\t\t\tthis.breadcrumb._makeCrumbs = function() {\n\t\t\t\t\tvar parts = OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this, [...arguments, 'icon-delete no-hover'])\n\t\t\t\t\tfor (var i = 1; i < parts.length; i++) {\n\t\t\t\t\t\tparts[i].name = getDeletedFileName(parts[i].name)\n\t\t\t\t\t}\n\t\t\t\t\treturn parts\n\t\t\t\t}\n\n\t\t\t\tOC.Plugins.attach('OCA.Trashbin.FileList', this)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\t/**\n\t\t * Override to only return read permissions\n\t\t */\n\t\t\tgetDirectoryPermissions: function() {\n\t\t\t\treturn OC.PERMISSION_READ | OC.PERMISSION_DELETE\n\t\t\t},\n\n\t\t\t_setCurrentDir: function(targetDir) {\n\t\t\t\tOCA.Files.FileList.prototype._setCurrentDir.apply(this, arguments)\n\n\t\t\t\tvar baseDir = OC.basename(targetDir)\n\t\t\t\tif (baseDir !== '') {\n\t\t\t\t\tthis.setPageTitle(getDeletedFileName(baseDir))\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_createRow: function() {\n\t\t\t// FIXME: MEGAHACK until we find a better solution\n\t\t\t\tvar tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments)\n\t\t\t\ttr.find('td.filesize').remove()\n\t\t\t\treturn tr\n\t\t\t},\n\n\t\t\tgetAjaxUrl: function(action, params) {\n\t\t\t\tvar q = ''\n\t\t\t\tif (params) {\n\t\t\t\t\tq = '?' + OC.buildQueryString(params)\n\t\t\t\t}\n\t\t\t\treturn OC.filePath('files_trashbin', 'ajax', action + '.php') + q\n\t\t\t},\n\n\t\t\tsetupUploadEvents: function() {\n\t\t\t// override and do nothing\n\t\t\t},\n\n\t\t\tlinkTo: function(dir) {\n\t\t\t\treturn OC.linkTo('files', 'index.php') + '?view=trashbin&dir=' + encodeURIComponent(dir).replace(/%2F/g, '/')\n\t\t\t},\n\n\t\t\telementToFile: function($el) {\n\t\t\t\tvar fileInfo = OCA.Files.FileList.prototype.elementToFile($el)\n\t\t\t\tif (this.getCurrentDirectory() === '/') {\n\t\t\t\t\tfileInfo.displayName = getDeletedFileName(fileInfo.name)\n\t\t\t\t}\n\t\t\t\t// no size available\n\t\t\t\tdelete fileInfo.size\n\t\t\t\treturn fileInfo\n\t\t\t},\n\n\t\t\tupdateEmptyContent: function() {\n\t\t\t\tvar exists = this.$fileList.find('tr:first').exists()\n\t\t\t\tthis.$el.find('.emptyfilelist.emptycontent').toggleClass('hidden', exists)\n\t\t\t\tthis.$el.find('.files-filestable th').toggleClass('hidden', !exists)\n\t\t\t},\n\n\t\t\t_removeCallback: function(files) {\n\t\t\t\tvar $el\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\t$el = this.remove(OC.basename(files[i]), { updateSummary: false })\n\t\t\t\t\t// Only remove element if already loaded (might be unloaded if scrollable list)\n\t\t\t\t\tif ($el) {\n\t\t\t\t\t\tthis.fileSummary.remove({ type: $el.attr('data-type'), size: $el.attr('data-size') })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.fileSummary.update()\n\t\t\t\tthis.updateEmptyContent()\n\t\t\t},\n\n\t\t\t_onClickRestoreSelected: function(event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvar self = this\n\t\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name')\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\tvar tr = this.findFileEl(files[i])\n\t\t\t\t\tthis.showFileBusyState(tr, true)\n\t\t\t\t}\n\n\t\t\t\tthis.fileMultiSelectMenu.toggleLoading('restore', true)\n\t\t\t\tvar restorePromises = files.map(function(file) {\n\t\t\t\t\treturn self.deleteOperationQueue.add(async () => {\n\t\t\t\t\t\tawait self.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true)\n\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\treturn Promise.all(restorePromises).then(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('restore', false)\n\t\t\t\t\t},\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while restoring files from trash bin'))\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t},\n\n\t\t\t_onClickDeleteSelected: function(event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvar self = this\n\t\t\t\tvar allFiles = this.$el.find('.select-all').is(':checked')\n\t\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name')\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\tvar tr = this.findFileEl(files[i])\n\t\t\t\t\tthis.showFileBusyState(tr, true)\n\t\t\t\t}\n\n\t\t\t\tif (allFiles) {\n\t\t\t\t\treturn this.client.remove(OC.joinPaths('trash', this.getCurrentDirectory()))\n\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tself.hideMask()\n\t\t\t\t\t\t\t\tself.setFiles([])\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while emptying trash bin'))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tthis.fileMultiSelectMenu.toggleLoading('delete', true)\n\t\t\t\t\tvar deletePromises = files.map(function(file) {\n\t\t\t\t\t\treturn self.deleteOperationQueue.add(async () => {\n\t\t\t\t\t\t\tawait self.client.remove(OC.joinPaths('trash', self.getCurrentDirectory(), file))\n\t\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\treturn Promise.all(deletePromises).then(\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('delete', false)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while removing files from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_onClickFile: function(event) {\n\t\t\t\tvar mime = $(this).parent().parent().data('mime')\n\t\t\t\tif (mime !== 'httpd/unix-directory') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t}\n\t\t\t\treturn OCA.Files.FileList.prototype._onClickFile.apply(this, arguments)\n\t\t\t},\n\n\t\t\tgeneratePreviewUrl: function(urlSpec) {\n\t\t\t\treturn OC.generateUrl('/apps/files_trashbin/preview?') + $.param(urlSpec)\n\t\t\t},\n\n\t\t\tgetDownloadUrl: function() {\n\t\t\t// no downloads\n\t\t\t\treturn '#'\n\t\t\t},\n\n\t\t\tgetDefaultActionUrl: function() {\n\t\t\t// no default action\n\t\t\t\treturn '#'\n\t\t\t},\n\n\t\t\tupdateStorageStatistics: function() {\n\t\t\t// no op because the trashbin doesn't have\n\t\t\t// storage info like free space / used space\n\t\t\t},\n\n\t\t\tisSelectedDeletable: function() {\n\t\t\t\treturn true\n\t\t\t},\n\n\t\t\t/**\n\t\t * Returns list of webdav properties to request\n\t\t */\n\t\t\t_getWebdavProperties: function() {\n\t\t\t\treturn [FILENAME_PROP, DELETION_TIME_PROP, TRASHBIN_ORIGINAL_LOCATION, TRASHBIN_TITLE].concat(this.filesClient.getPropfindProperties())\n\t\t\t},\n\n\t\t\t/**\n\t\t * Reloads the file list using ajax call\n\t\t *\n\t\t * @returns ajax call object\n\t\t */\n\t\t\treload: function() {\n\t\t\t\tthis._selectedFiles = {}\n\t\t\t\tthis._selectionSummary.clear()\n\t\t\t\tthis.$el.find('.select-all').prop('checked', false)\n\t\t\t\tthis.showMask()\n\t\t\t\tif (this._reloadCall?.abort) {\n\t\t\t\t\tthis._reloadCall.abort()\n\t\t\t\t}\n\t\t\t\tthis._reloadCall = this.client.getFolderContents(\n\t\t\t\t\t'trash/' + this.getCurrentDirectory(), {\n\t\t\t\t\t\tincludeParent: false,\n\t\t\t\t\t\tproperties: this._getWebdavProperties()\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\tvar callBack = this.reloadCallback.bind(this)\n\t\t\t\treturn this._reloadCall.then(callBack, callBack)\n\t\t\t},\n\t\t\treloadCallback: function(status, result) {\n\t\t\t\tdelete this._reloadCall\n\t\t\t\tthis.hideMask()\n\n\t\t\t\tif (status === 401) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Firewall Blocked request?\n\t\t\t\tif (status === 403) {\n\t\t\t\t// Go home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\tOC.Notification.show(t('files', 'This operation is forbidden'))\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Did share service die or something else fail?\n\t\t\t\tif (status === 500) {\n\t\t\t\t// Go home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\tOC.Notification.show(t('files', 'This directory is unavailable, please check the logs or contact the administrator'))\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tif (status === 404) {\n\t\t\t\t// go back home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\t// aborted ?\n\t\t\t\tif (status === 0) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\tthis.setFiles(result)\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t})\n\n\tOCA.Trashbin.FileList = FileList\n})()\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./trash.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./trash.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @copyright Copyright (c) 2016 Roeland Jago Douma \n *\n * @author Roeland Jago Douma \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 .\n *\n */\n\nimport './app'\nimport './filelist'\nimport './trash.scss'\n\nwindow.OCA.Trashbin = OCA.Trashbin\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-content-trashbin tbody tr[data-type=file] td a.name,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext span{cursor:default}#app-content-trashbin .summary :last-child{padding:0}#app-content-trashbin .files-filestable .summary .filesize{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_trashbin/src/trash.scss\"],\"names\":[],\"mappings\":\"AASA,4MAGC,cAAA,CAGD,2CACC,SAAA,CAED,2DACC,YAAA\",\"sourcesContent\":[\"/*\\n * Copyright (c) 2014\\n *\\n * This file is licensed under the Affero General Public License version 3\\n * or later.\\n *\\n * See the COPYING-README file.\\n *\\n */\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext span {\\n\\tcursor: default;\\n}\\n\\n#app-content-trashbin .summary :last-child {\\n\\tpadding: 0;\\n}\\n#app-content-trashbin .files-filestable .summary .filesize {\\n\\tdisplay: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// 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 = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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 = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2325;","__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\t2325: 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 = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(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(function(id) { return 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], function() { return __webpack_require__(27262); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","OCA","Trashbin","App","_initialized","client","initialize","$el","this","OC","Files","Client","host","getHost","port","getPort","root","linkToRemoteBase","getCurrentUser","uid","useHTTPS","getProtocol","urlParams","Util","History","parseUrlQuery","fileList","FileList","$","fileActions","_createFileActions","detailsViewEnabled","scrollTo","scrollto","config","getFilesConfig","multiSelectMenu","name","displayName","t","iconClass","shown","FileActions","register","PERMISSION_READ","filename","context","dir","getCurrentDirectory","changeDirectory","joinPaths","setDefault","registerAction","type","TYPE_INLINE","mime","permissions","actionHandler","tr","findFileEl","showFileBusyState","move","then","_removeCallback","bind","Notification","show","render","actionSpec","isDefault","$actionLink","_makeActionLink","attr","children","$file","find","append","remove","window","addEventListener","one","DELETED_REGEXP","RegExp","FILENAME_PROP","DELETION_TIME_PROP","TRASHBIN_ORIGINAL_LOCATION","TRASHBIN_TITLE","getDeletedFileName","basename","match","exec","length","options","deleteOperationQueue","PQueue","concurrency","prototype","_","extend","id","appName","addFileInfoParser","response","data","props","propStat","properties","path","title","mtime","parseInt","hasPreview","extraData","result","apply","arguments","click","_onClickRestoreSelected","setSort","breadcrumb","_makeCrumbs","parts","BreadCrumb","i","Plugins","attach","getDirectoryPermissions","PERMISSION_DELETE","_setCurrentDir","targetDir","baseDir","setPageTitle","_createRow","getAjaxUrl","action","params","q","buildQueryString","filePath","setupUploadEvents","linkTo","encodeURIComponent","replace","elementToFile","fileInfo","size","updateEmptyContent","exists","$fileList","toggleClass","files","updateSummary","fileSummary","update","event","preventDefault","self","pluck","getSelectedFiles","fileMultiSelectMenu","toggleLoading","restorePromises","map","file","add","Promise","all","_onClickDeleteSelected","allFiles","is","hideMask","setFiles","deletePromises","_onClickFile","parent","generatePreviewUrl","urlSpec","generateUrl","param","getDownloadUrl","getDefaultActionUrl","updateStorageStatistics","isSelectedDeletable","_getWebdavProperties","concat","filesClient","getPropfindProperties","reload","_selectedFiles","_selectionSummary","clear","prop","showMask","_reloadCall","abort","getFolderContents","includeParent","callBack","reloadCallback","status","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","b","document","baseURI","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file