From: John Molakvoæ (skjnldsv) Date: Tue, 30 Apr 2019 10:26:37 +0000 (+0200) Subject: Do NOT assume all files are selected if the first checkbox is X-Git-Tag: v17.0.0beta1~494^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=54afe0bca27e5cb95d05e043d2e40cea4c72575b;p=nextcloud-server.git Do NOT assume all files are selected if the first checkbox is Signed-off-by: John Molakvoæ (skjnldsv) --- 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; }, /**