]> source.dussan.org Git - nextcloud-server.git/commitdiff
adding action.filename to FileActions 29101/head
authorMaxence Lange <maxence@artificial-owl.com>
Fri, 8 Oct 2021 09:27:33 +0000 (08:27 -0100)
committerMaxence Lange <maxence@artificial-owl.com>
Fri, 8 Oct 2021 09:28:05 +0000 (08:28 -0100)
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
apps/files/js/fileactions.js
apps/files/js/fileactionsmenu.js
apps/files/js/filelist.js
apps/files/js/mainfileinfodetailview.js

index 5d9e8578e19617a6e7db3cdbb16c3c085066eb98..d413bf7471b34c2a1e4f31dfa19940d5c632ab49 100644 (file)
                                name: name,
                                displayName: action.displayName,
                                mime: mime,
+                               filename: action.filename,
                                order: action.order || 0,
                                icon: action.icon,
                                iconClass: action.iconClass,
                 * @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;
                 * @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);
                                        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
                 *
                        var actions = this.get(
                                fileInfoModel.get('mimetype'),
                                fileInfoModel.isDirectory() ? 'dir' : 'file',
-                               fileInfoModel.get('permissions')
+                               fileInfoModel.get('permissions'),
+                               fileInfoModel.get('name')
                        );
 
                        if (actionName) {
                        var actions = this.getActions(
                                this.getCurrentMimeType(),
                                this.getCurrentType(),
-                               this.getCurrentPermissions()
+                               this.getCurrentPermissions(),
+                               this.getCurrentFile()
                        );
                        var nameLinks;
                        if ($tr.data('renaming')) {
                                                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);
                                }
                        });
 
         * 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)
index 53dec693c1cbc8e1d04b60f3facfcfd6d4ead6da..c252ffa96b00e113cdef3f6234a72391ea6645de 100644 (file)
@@ -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();
index 62e4cab32951ee49526aa3a9b913dd11aaf164dc..b3d88085b7cc3af9e619818167018e2e834252d2 100644 (file)
                                        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,
index 93ca40af2b42980c08272d07eba553a3a0f1f1f1..0e0a297c79383172213c5ea5a09756c4da2cedbb 100644 (file)
                                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({