Merge pull request #15346 from nextcloud/backport/15309/stable15

[stable15] Do NOT assume all files are selected if the first checkbox is
This commit is contained in:
Morris Jobke 2019-05-06 12:27:43 +02:00 committed by GitHub
commit 3f657f87ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 6 deletions

View File

@ -812,7 +812,16 @@
* Event handler for when selecting/deselecting all files
*/
_onClickSelectAll: function(e) {
var checked = $(e.target).prop('checked');
var hiddenFiles = this.$fileList.find('tr.hidden');
var checked = e.target.checked;
if (hiddenFiles.length > 0) {
// set indeterminate alongside checked
e.target.indeterminate = checked;
} else {
e.target.indeterminate = false
}
// Select only visible checkboxes to filter out unmatched file in search
this.$fileList.find('td.selection > .selectCheckBox:visible').prop('checked', checked)
.closest('tr').toggleClass('selected', checked);
@ -822,7 +831,7 @@
// a search will automatically hide the unwanted rows
// let's only select the matches
var fileData = this.files[i];
var fileRow = this.$fileList.find('[data-id=' + fileData.id + ']');
var fileRow = this.$fileList.find('tr[data-id=' + fileData.id + ']');
// do not select already selected ones
if (!fileRow.hasClass('hidden') && _.isUndefined(this._selectedFiles[fileData.id])) {
this._selectedFiles[fileData.id] = fileData;
@ -832,7 +841,6 @@
} else {
// if we have some hidden row, then we're in a search
// Let's only deselect the visible ones
var hiddenFiles = this.$fileList.find('tr.hidden');
if (hiddenFiles.length > 0) {
var visibleFiles = this.$fileList.find('tr:not(.hidden)');
var self = this;
@ -3111,11 +3119,15 @@
},
/**
* Returns whether all files are selected
* @return true if all files are selected, false otherwise
* Are all files selected?
*
* @returns {Boolean} all files are selected
*/
isAllSelected: function() {
return this.$el.find('.select-all').prop('checked');
var checkbox = this.$el.find('.select-all')
var checked = checkbox.prop('checked')
var indeterminate = checkbox.prop('indeterminate')
return checked && !indeterminate;
},
/**