diff options
author | Pytal <24800714+Pytal@users.noreply.github.com> | 2021-10-12 14:58:56 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-12 14:58:56 -0700 |
commit | ddf0a2cf1fe9b3b15b5cf9a2336c7e34edbfe67d (patch) | |
tree | 1da1d71f679591337acc61a5d8b76e0d545d7d0f /apps/files/js | |
parent | da1b97decda88893cc26539439a15050953419ae (diff) | |
parent | 9e78b01f3ad3384250c76d57939f4e7a7b106a86 (diff) | |
download | nextcloud-server-ddf0a2cf1fe9b3b15b5cf9a2336c7e34edbfe67d.tar.gz nextcloud-server-ddf0a2cf1fe9b3b15b5cf9a2336c7e34edbfe67d.zip |
Merge pull request #29101 from nextcloud/enh/noid/fileaction-in-single-filename
Diffstat (limited to 'apps/files/js')
-rw-r--r-- | apps/files/js/fileactions.js | 44 | ||||
-rw-r--r-- | apps/files/js/fileactionsmenu.js | 6 | ||||
-rw-r--r-- | apps/files/js/filelist.js | 2 | ||||
-rw-r--r-- | apps/files/js/mainfileinfodetailview.js | 3 |
4 files changed, 39 insertions, 16 deletions
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index 5d9e8578e19..d413bf7471b 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -142,6 +142,7 @@ name: name, displayName: action.displayName, mime: mime, + filename: action.filename, order: action.order || 0, icon: action.icon, iconClass: action.iconClass, @@ -191,11 +192,12 @@ * @param {string} mime mime type * @param {string} type "dir" or "file" * @param {int} permissions permissions + * @param {string} filename filename * * @return {Object.<string,OCA.Files.FileActions~actionHandler>} map of action name to action spec */ - get: function (mime, type, permissions) { - var actions = this.getActions(mime, type, permissions); + get: function(mime, type, permissions, filename) { + var actions = this.getActions(mime, type, permissions, filename); var filteredActions = {}; $.each(actions, function (name, action) { filteredActions[name] = action.action; @@ -209,10 +211,11 @@ * @param {string} mime mime type * @param {string} type "dir" or "file" * @param {int} permissions permissions + * @param {string} filename filename * * @return {Array.<OCA.Files.FileAction>} array of action specs */ - getActions: function (mime, type, permissions) { + getActions: function(mime, type, permissions, filename) { var actions = {}; if (this.actions.all) { actions = $.extend(actions, this.actions.all); @@ -231,15 +234,29 @@ actions = $.extend(actions, this.actions[mime]); } } + var filteredActions = {}; - $.each(actions, function (name, action) { - if ((action.permissions === OC.PERMISSION_NONE) || (action.permissions & permissions)) { + var self = this; + $.each(actions, function(name, action) { + if (self.allowedPermissions(action.permissions, permissions) && + self.allowedFilename(action.filename, filename)) { filteredActions[name] = action; } }); + return filteredActions; }, + + allowedPermissions: function(actionPermissions, permissions) { + return (actionPermissions === OC.PERMISSION_NONE || (actionPermissions & permissions)); + }, + + allowedFilename: function(actionFilename, filename) { + return (!filename || filename === '' || !actionFilename + || actionFilename === '' || actionFilename === filename); + }, + /** * Returns the default file action handler for the given conditions * @@ -470,7 +487,8 @@ var actions = this.get( fileInfoModel.get('mimetype'), fileInfoModel.isDirectory() ? 'dir' : 'file', - fileInfoModel.get('permissions') + fileInfoModel.get('permissions'), + fileInfoModel.get('name') ); if (actionName) { @@ -528,7 +546,8 @@ var actions = this.getActions( this.getCurrentMimeType(), this.getCurrentType(), - this.getCurrentPermissions() + this.getCurrentPermissions(), + this.getCurrentFile() ); var nameLinks; if ($tr.data('renaming')) { @@ -673,11 +692,11 @@ if (type === OC.dialogs.FILEPICKER_TYPE_COPY) { context.fileList.copy(filename, targetPath, false, context.dir); } - if (type === OC.dialogs.FILEPICKER_TYPE_MOVE) { - context.fileList.move(filename, targetPath, false, context.dir); - } - context.fileList.dirInfo.dirLastCopiedTo = targetPath; - }, false, "httpd/unix-directory", true, actions, dialogDir); + if (type === OC.dialogs.FILEPICKER_TYPE_MOVE) { + context.fileList.move(filename, targetPath, false, context.dir); + } + context.fileList.dirInfo.dirLastCopiedTo = targetPath; + }, false, "httpd/unix-directory", true, actions, dialogDir); } }); @@ -777,6 +796,7 @@ * display name string for the action, or function that returns the display name. * Defaults to the name given in name property * @property {String} mime mime type + * @property {String} filename filename * @property {int} permissions permissions * @property {(Function|String)} icon icon path to the icon or function that returns it (deprecated, use iconClass instead) * @property {(String|OCA.Files.FileActions~iconClassFunction)} iconClass class name of the icon (recommended for theming) diff --git a/apps/files/js/fileactionsmenu.js b/apps/files/js/fileactionsmenu.js index 53dec693c1c..c252ffa96b0 100644 --- a/apps/files/js/fileactionsmenu.js +++ b/apps/files/js/fileactionsmenu.js @@ -49,7 +49,8 @@ var actions = fileActions.getActions( fileActions.getCurrentMimeType(), fileActions.getCurrentType(), - fileActions.getCurrentPermissions() + fileActions.getCurrentPermissions(), + fileActions.getCurrentFile() ); var actionSpec = actions[actionName]; var fileName = this._context.$file.attr('data-file'); @@ -74,7 +75,8 @@ var actions = fileActions.getActions( fileActions.getCurrentMimeType(), fileActions.getCurrentType(), - fileActions.getCurrentPermissions() + fileActions.getCurrentPermissions(), + fileActions.getCurrentFile() ); var defaultAction = fileActions.getCurrentDefaultFileAction(); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 62e4cab3295..b3d88085b7c 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -945,7 +945,7 @@ var mime = this.fileActions.getCurrentMimeType(); var type = this.fileActions.getCurrentType(); var permissions = this.fileActions.getCurrentPermissions(); - var action = this.fileActions.get(mime, type, permissions)['Details']; + var action = this.fileActions.get(mime, type, permissions, filename)['Details']; if (action) { action(filename, { $file: $tr, diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js index 93ca40af2b4..0e0a297c793 100644 --- a/apps/files/js/mainfileinfodetailview.js +++ b/apps/files/js/mainfileinfodetailview.js @@ -154,7 +154,8 @@ var availableActions = this._fileActions.get( this.model.get('mimetype'), this.model.get('type'), - this.model.get('permissions') + this.model.get('permissions'), + this.model.get('name') ); var hasFavoriteAction = 'Favorite' in availableActions; this.$el.html(this.template({ |