diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index 871a2149c883241f64292fd24bae4767f6eacf7e..67125f1570f46852569ad968a9609d6f80eab1dd 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -617,7 +617,16 @@ 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 @@ -668,8 +677,9 @@ * @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 @@ -702,6 +712,16 @@ * @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 * diff --git a/apps/files/js/fileactionsmenu.js b/apps/files/js/fileactionsmenu.js index 67cbb48c9651988347410f5ea81462baa02a2cec..9e51d8f1f1fe58bf16da97fc9111b840a3cbcfd1 100644 --- a/apps/files/js/fileactionsmenu.js +++ b/apps/files/js/fileactionsmenu.js @@ -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(), @@ -100,6 +101,13 @@ (!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; diff --git a/apps/files/tests/js/fileactionsmenuSpec.js b/apps/files/tests/js/fileactionsmenuSpec.js index 747a746a602522d5aa915d9baee0f489bc32a93e..3028db2b3ac675ec9e735e2768f5de5a0841a6c8 100644 --- a/apps/files/tests/js/fileactionsmenuSpec.js +++ b/apps/files/tests/js/fileactionsmenuSpec.js @@ -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() {