From 3a99f15af29918a67bf8789ed79006e80901d233 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 15 Aug 2014 16:52:41 +0200 Subject: [PATCH] Client side sort for sharing overview Since the server doesn't support sorting, use client side sort directly instead of calling reload() first. --- apps/files/js/filelist.js | 26 ++++++++++++++++++++----- apps/files_sharing/js/sharedfilelist.js | 2 ++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index d443dd2fd7..fc251c9201 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -89,6 +89,13 @@ */ _sortComparator: null, + /** + * Whether to do a client side sort. + * When false, clicking on a table header will call reload(). + * When true, clicking on a table header will simply resort the list. + */ + _clientSideSort: false, + /** * Current directory */ @@ -368,17 +375,16 @@ sort = $target.attr('data-sort'); if (sort) { if (this._sort === sort) { - this.setSort(sort, (this._sortDirection === 'desc')?'asc':'desc'); + this.setSort(sort, (this._sortDirection === 'desc')?'asc':'desc', true); } else { if ( sort === 'name' ) { //default sorting of name is opposite to size and mtime - this.setSort(sort, 'asc'); + this.setSort(sort, 'asc', true); } else { - this.setSort(sort, 'desc'); + this.setSort(sort, 'desc', true); } } - this.reload(); } }, @@ -915,8 +921,9 @@ * * @param sort sort attribute name * @param direction sort direction, one of "asc" or "desc" + * @param update true to update the list, false otherwise (default) */ - setSort: function(sort, direction) { + setSort: function(sort, direction, update) { var comparator = FileList.Comparators[sort] || FileList.Comparators.name; this._sort = sort; this._sortDirection = (direction === 'desc')?'desc':'asc'; @@ -938,6 +945,15 @@ .removeClass(this.SORT_INDICATOR_DESC_CLASS) .toggleClass('hidden', false) .addClass(direction === 'desc' ? this.SORT_INDICATOR_DESC_CLASS : this.SORT_INDICATOR_ASC_CLASS); + if (update) { + if (this._clientSideSort) { + this.files.sort(this._sortComparator); + this.setFiles(this.files); + } + else { + this.reload(); + } + } }, /** diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js index 7a43185a2d..d29285dc1d 100644 --- a/apps/files_sharing/js/sharedfilelist.js +++ b/apps/files_sharing/js/sharedfilelist.js @@ -28,6 +28,8 @@ _sharedWithUser: false, _linksOnly: false, + _clientSideSort: true, + initialize: function($el, options) { OCA.Files.FileList.prototype.initialize.apply(this, arguments); if (this.initialized) {