]> source.dussan.org Git - nextcloud-server.git/commitdiff
Bring back file delete action text to be based on context
authorVincent Petry <pvince81@owncloud.com>
Fri, 11 Dec 2015 14:14:30 +0000 (15:14 +0100)
committerVincent Petry <pvince81@owncloud.com>
Fri, 11 Dec 2015 14:14:30 +0000 (15:14 +0100)
For received shares, the delete action becomes "Unshare" and for
personal mounts it becomes "Disconnect storage".

This also makes it possible from now on to pass a function to a file
action's "displayName" attribute.

apps/files/js/fileactions.js
apps/files/js/fileactionsmenu.js
apps/files/tests/js/fileactionsmenuSpec.js

index 871a2149c883241f64292fd24bae4767f6eacf7e..67125f1570f46852569ad968a9609d6f80eab1dd 100644 (file)
 
                        this.registerAction({
                                name: 'Delete',
-                               displayName: t('files', 'Delete'),
+                               displayName: function(context) {
+                                       var mountType = context.$file.attr('data-mounttype');
+                                       var deleteTitle = t('files', 'Delete');
+                                       if (mountType === 'external-root') {
+                                               deleteTitle = t('files', 'Disconnect storage');
+                                       } else if (mountType === 'shared-root') {
+                                               deleteTitle = t('files', 'Unshare');
+                                       }
+                                       return deleteTitle;
+                               },
                                mime: 'all',
                                order: 1000,
                                // permission is READ because we show a hint instead if there is no permission
         * @typedef {Object} OCA.Files.FileAction
         *
         * @property {String} name identifier of the action
-        * @property {String} displayName display name of the action, defaults
-        * to the name given in name property
+        * @property {(String|OCA.Files.FileActions~displayNameFunction)} displayName
+        * 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 {int} permissions permissions
         * @property {(Function|String)} icon icon path to the icon or function
         * @return {Object} jQuery link object
         */
 
+       /**
+        * Display name function for actions.
+        * The function returns the display name of the action using
+        * the given context information..
+        *
+        * @callback OCA.Files.FileActions~displayNameFunction
+        * @param {OCA.Files.FileActionContext} context action context
+        * @return {String} display name
+        */
+
        /**
         * Action handler function for file actions
         *
index 67cbb48c9651988347410f5ea81462baa02a2cec..9e51d8f1f1fe58bf16da97fc9111b840a3cbcfd1 100644 (file)
@@ -81,6 +81,7 @@
                 * Renders the menu with the currently set items
                 */
                render: function() {
+                       var self = this;
                        var fileActions = this._context.fileActions;
                        var actions = fileActions.getActions(
                                fileActions.getCurrentMimeType(),
                                        (!defaultAction || actionSpec.name !== defaultAction.name)
                                );
                        });
+                       items = _.map(items, function(item) {
+                               if (_.isFunction(item.displayName)) {
+                                       item = _.extend({}, item);
+                                       item.displayName = item.displayName(self._context);
+                               }
+                               return item;
+                       });
                        items = items.sort(function(actionA, actionB) {
                                var orderA = actionA.order || 0;
                                var orderB = actionB.order || 0;
index 747a746a602522d5aa915d9baee0f489bc32a93e..3028db2b3ac675ec9e735e2768f5de5a0841a6c8 100644 (file)
@@ -20,7 +20,7 @@
 */
 
 describe('OCA.Files.FileActionsMenu tests', function() {
-       var fileList, fileActions, menu, actionStub, $tr;
+       var fileList, fileActions, menu, actionStub, menuContext, $tr;
 
        beforeEach(function() {
                // init horrible parameters
@@ -80,7 +80,7 @@ describe('OCA.Files.FileActionsMenu tests', function() {
                };
                $tr = fileList.add(fileData);
 
-               var menuContext = {
+               menuContext = {
                        $file: $tr,
                        fileList: fileList,
                        fileActions: fileActions,
@@ -189,6 +189,22 @@ describe('OCA.Files.FileActionsMenu tests', function() {
                        var yactionIndex = menu.$el.find('a[data-action=Yaction]').closest('li').index();
                        expect(wactionIndex).toBeLessThan(yactionIndex);
                });
+               it('calls displayName function', function() {
+                       var displayNameStub = sinon.stub().returns('Test');
+
+                       fileActions.registerAction({
+                               name: 'Something',
+                               displayName: displayNameStub,
+                               mime: 'text/plain',
+                               permissions: OC.PERMISSION_ALL
+                       });
+
+                       menu.render();
+
+                       expect(displayNameStub.calledOnce).toEqual(true);
+                       expect(displayNameStub.calledWith(menuContext)).toEqual(true);
+                       expect(menu.$el.find('a[data-action=Something]').text()).toEqual('Test');
+               });
        });
 
        describe('action handler', function() {