From ece6ca2ec767b073f57e78657aa98b5289e7e954 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Sun, 24 Sep 2023 17:49:21 +0200 Subject: [PATCH 1/2] fix(files_trashbin): Only remove element if loaded Make sure to only remove elements from file list (while restoring) if the element was added to the file list (might not be added, if the list is scrolling). Signed-off-by: Ferdinand Thiessen --- apps/files_trashbin/src/filelist.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/files_trashbin/src/filelist.js b/apps/files_trashbin/src/filelist.js index 7fb55d4b932d5..bd9d8a0a6743d 100644 --- a/apps/files_trashbin/src/filelist.js +++ b/apps/files_trashbin/src/filelist.js @@ -168,7 +168,10 @@ var $el for (var i = 0; i < files.length; i++) { $el = this.remove(OC.basename(files[i]), { updateSummary: false }) - this.fileSummary.remove({ type: $el.attr('data-type'), size: $el.attr('data-size') }) + // Only remove element if already loaded (might be unloaded if scrollable list) + if ($el) { + this.fileSummary.remove({ type: $el.attr('data-type'), size: $el.attr('data-size') }) + } } this.fileSummary.update() this.updateEmptyContent() From f452ef71140e98d25ec9938c035e3b8982689f76 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Mon, 25 Sep 2023 12:32:44 +0200 Subject: [PATCH 2/2] chore: compile assets Signed-off-by: Ferdinand Thiessen --- 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 fe42af78ce436..46f4b821e9654 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 s=n.fileList.getCurrentDirectory();e.move(OC.joinPaths("trash",s,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 s=n.fileList.getCurrentDirectory();e.remove(OC.joinPaths("trash",s,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"))}))}))},92832:function(){!function(){var e=new RegExp(/^(.+)\.d[0-9]+$/),i="{http://nextcloud.org/ns}trashbin-filename",n="{http://nextcloud.org/ns}trashbin-deletion-time",r="{http://nextcloud.org/ns}trashbin-original-location",a="{http://nextcloud.org/ns}trashbin-title";function s(t){t=OC.basename(t);var i=e.exec(t);return i&&i.length>1&&(t=i[1]),t}var o=function(e,t){this.client=t.client,this.initialize(e,t)};o.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 s=e.propStat[0].properties,o=s[r],l=s[a];return{displayName:s[i],mtime:1e3*parseInt(s[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):(o=!1,a0&&e[h-1][2]>a;h--)e[h]=e[h-1];e[h]=[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,s=i[0],o=i[1],l=i[2],c=0;if(s.some((function(t){return 0!==e[t]}))){for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var h=l(r)}for(t&&t(i);c1&&(t=i[1]),t}var o=function(e,t){this.client=t.client,this.initialize(e,t)};o.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 s=e.propStat[0].properties,o=s[r],l=s[a];return{displayName:s[i],mtime:1e3*parseInt(s[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):(o=!1,a0&&e[h-1][2]>a;h--)e[h]=e[h-1];e[h]=[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,s=i[0],o=i[1],l=i[2],c=0;if(s.some((function(t){return 0!==e[t]}))){for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var h=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 */\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}\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\tthis.fileSummary.remove({ type: $el.attr('data-type'), size: $el.attr('data-size') })\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.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true)\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._removeCallback([file])\n\t\t\t\t\t\t\t}\n\t\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.client.remove(OC.joinPaths('trash', self.getCurrentDirectory(), file))\n\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t\t\t\t}\n\t\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) {\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","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// 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__(69845); })\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","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","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","amdD","Error","amdO","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=4a98fdacc44fc0f8b7d7","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/amd define","webpack:///nextcloud/webpack/runtime/amd options","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 */\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}\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.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true)\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._removeCallback([file])\n\t\t\t\t\t\t\t}\n\t\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.client.remove(OC.joinPaths('trash', self.getCurrentDirectory(), file))\n\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t\t\t\t}\n\t\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) {\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","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// 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__(69845); })\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","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","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","amdD","Error","amdO","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