From 436ffaecb479f7524782238d116848336a30bc6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Fri, 5 Jan 2018 19:06:06 +0100 Subject: [PATCH] Hide favourite icon in details view if favourite action is not available MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the favourite icon in the details view is clicked the "Favorite" action is triggered. However, if the action name given to "triggerAction" is not found then the "Download" action is triggered instead. As the "Favorite" action is not available in some file lists (like "Recents") the "Download" action was executed instead in those cases, which was a strange behaviour. Now the favourite icon is hidden if its action is not available. Signed-off-by: Daniel Calviño Sánchez --- apps/files/js/mainfileinfodetailview.js | 9 ++++++ .../tests/js/mainfileinfodetailviewSpec.js | 32 ++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js index d703ca8371c6c..f7073b2e01d7f 100644 --- a/apps/files/js/mainfileinfodetailview.js +++ b/apps/files/js/mainfileinfodetailview.js @@ -20,9 +20,11 @@ '' + '' + '
' + + ' {{#if hasFavoriteAction}}' + ' ' + ' ' + ' ' + + ' {{/if}}' + ' {{#if hasSize}}{{size}}, {{/if}}{{date}}' + '
' + '' + @@ -154,6 +156,12 @@ if (this.model) { var isFavorite = (this.model.get('tags') || []).indexOf(OC.TAG_FAVORITE) >= 0; + var availableActions = this._fileActions.get( + this.model.get('mimetype'), + this.model.get('type'), + this.model.get('permissions') + ); + var hasFavoriteAction = 'Favorite' in availableActions; this.$el.html(this.template({ type: this.model.isImage()? 'image': '', nameLabel: t('files', 'Name'), @@ -168,6 +176,7 @@ altDate: OC.Util.formatDate(this.model.get('mtime')), timestamp: this.model.get('mtime'), date: OC.Util.relativeModifiedDate(this.model.get('mtime')), + hasFavoriteAction: hasFavoriteAction, starAltText: isFavorite ? t('files', 'Favorited') : t('files', 'Favorite'), starClass: isFavorite ? 'icon-starred' : 'icon-star', permalink: this._makePermalink(this.model.get('id')), diff --git a/apps/files/tests/js/mainfileinfodetailviewSpec.js b/apps/files/tests/js/mainfileinfodetailviewSpec.js index faf0faa8d8f5e..956df29a65008 100644 --- a/apps/files/tests/js/mainfileinfodetailviewSpec.js +++ b/apps/files/tests/js/mainfileinfodetailviewSpec.js @@ -68,6 +68,12 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() { .toEqual(OC.getProtocol() + '://' + OC.getHost() + OC.generateUrl('/f/5')); }); it('displays favorite icon', function() { + fileActions.registerAction({ + name: 'Favorite', + mime: 'all', + permissions: OC.PERMISSION_READ + }); + testFileInfo.set('tags', [OC.TAG_FAVORITE]); view.setFileInfo(testFileInfo); expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(true); @@ -78,6 +84,15 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() { expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(false); expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true); }); + it('does not display favorite icon if favorite action is not available', function() { + testFileInfo.set('tags', [OC.TAG_FAVORITE]); + view.setFileInfo(testFileInfo); + expect(view.$el.find('.action-favorite').length).toEqual(0); + + testFileInfo.set('tags', []); + view.setFileInfo(testFileInfo); + expect(view.$el.find('.action-favorite').length).toEqual(0); + }); it('displays mime icon', function() { // File var lazyLoadPreviewStub = sinon.stub(fileList, 'lazyLoadPreview'); @@ -183,6 +198,13 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() { expect(view.$el.find('.fileName h3').attr('title')).toEqual('hello.txt'); }); it('rerenders when changes are made on the model', function() { + // Show the "Favorite" icon + fileActions.registerAction({ + name: 'Favorite', + mime: 'all', + permissions: OC.PERMISSION_READ + }); + view.setFileInfo(testFileInfo); testFileInfo.set('tags', [OC.TAG_FAVORITE]); @@ -196,11 +218,19 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() { expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true); }); it('unbinds change listener from model', function() { + // Show the "Favorite" icon + fileActions.registerAction({ + name: 'Favorite', + mime: 'all', + permissions: OC.PERMISSION_READ + }); + view.setFileInfo(testFileInfo); view.setFileInfo(new OCA.Files.FileInfoModel({ id: 999, name: 'test.txt', - path: '/' + path: '/', + permissions: 31 })); // set value on old model