diff options
author | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2019-05-02 13:47:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-02 13:47:06 +0200 |
commit | 829adcb0b5110da7ae634e69ccc47c64afcc9fd2 (patch) | |
tree | 1b40af83c26ca106a8fd6d488b4398dcd67f69c4 /apps | |
parent | 14c53864d6437f5dc36cd6b20250da336770499c (diff) | |
parent | 54afe0bca27e5cb95d05e043d2e40cea4c72575b (diff) | |
download | nextcloud-server-829adcb0b5110da7ae634e69ccc47c64afcc9fd2.tar.gz nextcloud-server-829adcb0b5110da7ae634e69ccc47c64afcc9fd2.zip |
Merge pull request #15309 from nextcloud/fix/files-selection-bug
Do NOT assume all files are selected if the first checkbox is
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files/js/filelist.js | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 44c4c5abec9..ea4ea6e1956 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -897,7 +897,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); @@ -907,7 +916,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; @@ -917,7 +926,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; @@ -3260,11 +3268,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; }, /** |