Hide summary file actions when a selected file does not match

When several files are selected and one of them can not be deleted the
"Delete" file action is not shown in the summary. This commit extends
that behaviour too to the other file actions in the summary ("Move or
copy" and "Download"), so now an action is shown in the summary only if
it can be executed on all the currently selected files.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
Daniel Calviño Sánchez 2017-11-02 12:47:57 +01:00
parent 8ee765a617
commit a9540fe990
2 changed files with 43 additions and 0 deletions

View file

@ -2822,10 +2822,30 @@
this.$el.find('#headerName a.name>span:first').text(selection);
this.$el.find('#modified a>span:first').text('');
this.$el.find('table').addClass('multiselect');
this.$el.find('.selectedActions .copy-move').toggleClass('hidden', !this.isSelectedCopiableOrMovable());
this.$el.find('.selectedActions .download').toggleClass('hidden', !this.isSelectedDownloadable());
this.$el.find('.delete-selected').toggleClass('hidden', !this.isSelectedDeletable());
}
},
/**
* Check whether all selected files are copiable or movable
*/
isSelectedCopiableOrMovable: function() {
return _.reduce(this.getSelectedFiles(), function(copiableOrMovable, file) {
return copiableOrMovable && (file.permissions & OC.PERMISSION_UPDATE);
}, true);
},
/**
* Check whether all selected files are downloadable
*/
isSelectedDownloadable: function() {
return _.reduce(this.getSelectedFiles(), function(downloadable, file) {
return downloadable && (file.permissions & OC.PERMISSION_READ);
}, true);
},
/**
* Check whether all selected files are deletable
*/

View file

@ -94,6 +94,7 @@ describe('OCA.Files.FileList tests', function() {
'<input type="checkbox" id="select_all_files" class="select-all checkbox">' +
'<a class="name columntitle" data-sort="name"><span>Name</span><span class="sort-indicator"></span></a>' +
'<span id="selectedActionsList" class="selectedActions hidden">' +
'<a href class="copy-move">Move or copy</a>' +
'<a href class="download"><img src="actions/download.svg">Download</a>' +
'<a href class="delete-selected">Delete</a></span>' +
'</th>' +
@ -2024,6 +2025,28 @@ describe('OCA.Files.FileList tests', function() {
});
});
describe('Selection overlay', function() {
it('show doesnt show the copy/move action if one or more files are not copiable/movable', function () {
fileList.setFiles(testFiles);
$('#permissions').val(OC.PERMISSION_READ | OC.PERMISSION_UPDATE);
$('.select-all').click();
expect(fileList.$el.find('.selectedActions .copy-move').hasClass('hidden')).toEqual(false);
testFiles[0].permissions = OC.PERMISSION_READ;
$('.select-all').click();
fileList.setFiles(testFiles);
$('.select-all').click();
expect(fileList.$el.find('.selectedActions .copy-move').hasClass('hidden')).toEqual(true);
});
it('show doesnt show the download action if one or more files are not downloadable', function () {
fileList.setFiles(testFiles);
$('#permissions').val(OC.PERMISSION_READ | OC.PERMISSION_UPDATE);
$('.select-all').click();
expect(fileList.$el.find('.selectedActions .download').hasClass('hidden')).toEqual(false);
testFiles[0].permissions = OC.PERMISSION_UPDATE;
$('.select-all').click();
fileList.setFiles(testFiles);
$('.select-all').click();
expect(fileList.$el.find('.selectedActions .download').hasClass('hidden')).toEqual(true);
});
it('show doesnt show the delete action if one or more files are not deletable', function () {
fileList.setFiles(testFiles);
$('#permissions').val(OC.PERMISSION_READ | OC.PERMISSION_DELETE);