Hide favourite icon in details view if favourite action is not available

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 <danxuliu@gmail.com>
This commit is contained in:
Daniel Calviño Sánchez 2018-01-05 19:06:06 +01:00
parent 68e205e827
commit 3113ee1129
2 changed files with 38 additions and 0 deletions

View File

@ -20,9 +20,11 @@
'</a>' + '</a>' +
'</div>' + '</div>' +
' <div class="file-details ellipsis">' + ' <div class="file-details ellipsis">' +
' {{#if hasFavoriteAction}}' +
' <a href="#" class="action action-favorite favorite permanent">' + ' <a href="#" class="action action-favorite favorite permanent">' +
' <span class="icon {{starClass}}" title="{{starAltText}}"></span>' + ' <span class="icon {{starClass}}" title="{{starAltText}}"></span>' +
' </a>' + ' </a>' +
' {{/if}}' +
' {{#if hasSize}}<span class="size" title="{{altSize}}">{{size}}</span>, {{/if}}<span class="date live-relative-timestamp" data-timestamp="{{timestamp}}" title="{{altDate}}">{{date}}</span>' + ' {{#if hasSize}}<span class="size" title="{{altSize}}">{{size}}</span>, {{/if}}<span class="date live-relative-timestamp" data-timestamp="{{timestamp}}" title="{{altDate}}">{{date}}</span>' +
' </div>' + ' </div>' +
'</div>' + '</div>' +
@ -175,6 +177,12 @@
if (this.model) { if (this.model) {
var isFavorite = (this.model.get('tags') || []).indexOf(OC.TAG_FAVORITE) >= 0; 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({ this.$el.html(this.template({
type: this.model.isImage()? 'image': '', type: this.model.isImage()? 'image': '',
nameLabel: t('files', 'Name'), nameLabel: t('files', 'Name'),
@ -189,6 +197,7 @@
altDate: OC.Util.formatDate(this.model.get('mtime')), altDate: OC.Util.formatDate(this.model.get('mtime')),
timestamp: this.model.get('mtime'), timestamp: this.model.get('mtime'),
date: OC.Util.relativeModifiedDate(this.model.get('mtime')), date: OC.Util.relativeModifiedDate(this.model.get('mtime')),
hasFavoriteAction: hasFavoriteAction,
starAltText: isFavorite ? t('files', 'Favorited') : t('files', 'Favorite'), starAltText: isFavorite ? t('files', 'Favorited') : t('files', 'Favorite'),
starClass: isFavorite ? 'icon-starred' : 'icon-star', starClass: isFavorite ? 'icon-starred' : 'icon-star',
permalink: this._makePermalink(this.model.get('id')), permalink: this._makePermalink(this.model.get('id')),

View File

@ -68,6 +68,12 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
.toEqual(OC.getProtocol() + '://' + OC.getHost() + OC.generateUrl('/f/5')); .toEqual(OC.getProtocol() + '://' + OC.getHost() + OC.generateUrl('/f/5'));
}); });
it('displays favorite icon', function() { it('displays favorite icon', function() {
fileActions.registerAction({
name: 'Favorite',
mime: 'all',
permissions: OC.PERMISSION_NONE
});
testFileInfo.set('tags', [OC.TAG_FAVORITE]); testFileInfo.set('tags', [OC.TAG_FAVORITE]);
view.setFileInfo(testFileInfo); view.setFileInfo(testFileInfo);
expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(true); 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-starred')).toEqual(false);
expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true); 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() { it('displays mime icon', function() {
// File // File
var lazyLoadPreviewStub = sinon.stub(fileList, 'lazyLoadPreview'); 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'); expect(view.$el.find('.fileName h3').attr('title')).toEqual('hello.txt');
}); });
it('rerenders when changes are made on the model', function() { it('rerenders when changes are made on the model', function() {
// Show the "Favorite" icon
fileActions.registerAction({
name: 'Favorite',
mime: 'all',
permissions: OC.PERMISSION_NONE
});
view.setFileInfo(testFileInfo); view.setFileInfo(testFileInfo);
testFileInfo.set('tags', [OC.TAG_FAVORITE]); testFileInfo.set('tags', [OC.TAG_FAVORITE]);
@ -196,6 +218,13 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true); expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true);
}); });
it('unbinds change listener from model', function() { it('unbinds change listener from model', function() {
// Show the "Favorite" icon
fileActions.registerAction({
name: 'Favorite',
mime: 'all',
permissions: OC.PERMISSION_NONE
});
view.setFileInfo(testFileInfo); view.setFileInfo(testFileInfo);
view.setFileInfo(new OCA.Files.FileInfoModel({ view.setFileInfo(new OCA.Files.FileInfoModel({
id: 999, id: 999,