From fb459657e9e622fa89dce1128a505d5592b682f2 Mon Sep 17 00:00:00 2001 From: Brad Langhorst Date: Sat, 6 Jul 2019 08:43:52 -0400 Subject: [PATCH 1/3] Adds sortability to date and size columns --- .../mvc/library/library-folderlist-view.js | 33 ++++++++++------- .../scripts/mvc/library/library-model.js | 4 +-- .../scripts/mvc/library/library-util.js | 36 +++++++++---------- .../webapps/galaxy/api/folder_contents.py | 5 +-- 4 files changed, 42 insertions(+), 36 deletions(-) diff --git a/client/galaxy/scripts/mvc/library/library-folderlist-view.js b/client/galaxy/scripts/mvc/library/library-folderlist-view.js index 55d210fb633..7fb0c1d36dd 100644 --- a/client/galaxy/scripts/mvc/library/library-folderlist-view.js +++ b/client/galaxy/scripts/mvc/library/library-folderlist-view.js @@ -25,7 +25,9 @@ var FolderListView = Backbone.View.extend({ "click .folder_row": "selectClickedRow", "click .sort-folder-name": "sortColumnClicked", "click .sort-folder-file_ext": "sortColumnClicked", - "click .sort-folder-description": "sortColumnClicked", + "click .sort-folder-message": "sortColumnClicked", + "click .sort-folder-update_time": "sortColumnClicked", + "click .sort-folder-raw_size": "sortColumnClicked", "click .sort-folder-state": "sortColumnClicked" }, @@ -271,6 +273,7 @@ var FolderListView = Backbone.View.extend({ event.preventDefault(); this.current_sort_order = this.current_sort_order === "asc" ? "desc" : "asc"; this.current_sort_key = event.currentTarget.className.replace("sort-folder-", ""); + console.log("current sort: " + this.current_sort_key) this.collection.sortFolder(this.current_sort_key, this.current_sort_order); this.renderSortIcon(); }, @@ -337,10 +340,11 @@ var FolderListView = Backbone.View.extend({ }, renderSortIcon: function() { + $('[class*="sort-icon"]') + .removeClass("fa-sort-alpha-desc") + .removeClass("fa-sort-alpha-asc"); + if (this.current_sort_order === "asc") { - $('[class*="sort-icon"]') - .removeClass("fa-sort-alpha-desc") - .removeClass("fa-sort-alpha-asc"); $(`.sort-icon-${this.current_sort_key}`).addClass("fa-sort-alpha-asc"); } else { $(`.sort-icon-${this.current_sort_key}`).addClass("fa-sort-alpha-desc"); @@ -484,22 +488,27 @@ var FolderListView = Backbone.View.extend({ Name - + - Description - + Description + Data Type - + + + + Size + + + + Time Updated (UTC) + - Size - Time Updated (UTC) State - + diff --git a/client/galaxy/scripts/mvc/library/library-model.js b/client/galaxy/scripts/mvc/library/library-model.js index b1c91a25e40..a8698e5ba41 100644 --- a/client/galaxy/scripts/mvc/library/library-model.js +++ b/client/galaxy/scripts/mvc/library/library-model.js @@ -57,7 +57,7 @@ var Libraries = Backbone.Collection.extend({ }, sortLibraries: function(sort_key, sort_order) { - this.comparator = mod_util.generateLibraryComparator(sort_key, sort_order); + this.comparator = mod_util.generateComparator(sort_key, sort_order); this.sort(); } }); @@ -79,7 +79,7 @@ var Folder = Backbone.Collection.extend({ model: LibraryItem, sortFolder: function(sort_key, sort_order) { - this.comparator = mod_util.generateFolderComparator(sort_key, sort_order); + this.comparator = mod_util.generateComparator(sort_key, sort_order); this.sort(); } }); diff --git a/client/galaxy/scripts/mvc/library/library-util.js b/client/galaxy/scripts/mvc/library/library-util.js index 17e830e5152..c4d546c4b25 100644 --- a/client/galaxy/scripts/mvc/library/library-util.js +++ b/client/galaxy/scripts/mvc/library/library-util.js @@ -6,7 +6,7 @@ * @param {str} sort_order order to sort by (asc, desc) * @return {function} two-argument comparator function */ -var generateFolderComparator = (sort_key, sort_order) => (itemA, itemB) => { +var generateComparator = (sort_key, sort_order) => (itemA, itemB) => { if (itemA.get("type") === itemB.get("type")) { if (!itemA.has(sort_key) && !itemB.has(sort_key)) { return 0; @@ -15,12 +15,24 @@ var generateFolderComparator = (sort_key, sort_order) => (itemA, itemB) => { } else if (!itemB.has(sort_key)) { return -1; } - if (itemA.get(sort_key).toLowerCase() > itemB.get(sort_key).toLowerCase()) { + var comparable_itemA_key; + var comparable_itemB_key; + if (typeof itemA.get(sort_key) === "number") { + comparable_itemA_key = itemA.get(sort_key); + comparable_itemB_key = itemB.get(sort_key); + } + else + { + comparable_itemA_key = itemA.get(sort_key).toLowerCase(); + comparable_itemB_key = itemB.get(sort_key).toLowerCase(); + } + if ( comparable_itemA_key > comparable_itemB_key) { return sort_order === "asc" ? 1 : -1; } - if (itemB.get(sort_key).toLowerCase() > itemA.get(sort_key).toLowerCase()) { + if (comparable_itemB_key > comparable_itemA_key) { return sort_order === "asc" ? -1 : 1; } + return 0; // equal } else { if (itemA.get("type") === "folder") { @@ -29,22 +41,6 @@ var generateFolderComparator = (sort_key, sort_order) => (itemA, itemB) => { return 1; } }; -/** - * Create alphabetical based two-argument comparator - * @param {str} sort_key key to sort by - * @param {str} sort_order order to sort by (asc, desc) - * @return {function} two-argument comparator function - */ -var generateLibraryComparator = (sort_key, sort_order) => (libraryA, libraryB) => { - if (libraryA.get(sort_key).toLowerCase() > libraryB.get(sort_key).toLowerCase()) { - return sort_order === "asc" ? 1 : -1; - } - if (libraryB.get(sort_key).toLowerCase() > libraryA.get(sort_key).toLowerCase()) { - return sort_order === "asc" ? -1 : 1; - } - return 0; // equal -}; export default { - generateFolderComparator: generateFolderComparator, - generateLibraryComparator: generateLibraryComparator + generateComparator: generateComparator }; diff --git a/lib/galaxy/webapps/galaxy/api/folder_contents.py b/lib/galaxy/webapps/galaxy/api/folder_contents.py index 8ee9745f23c..acb0db1de02 100644 --- a/lib/galaxy/webapps/galaxy/api/folder_contents.py +++ b/lib/galaxy/webapps/galaxy/api/folder_contents.py @@ -105,8 +105,8 @@ class FolderContentsController(BaseAPIController, UsesLibraryMixin, UsesLibraryM # Can user manage the permissions on the dataset? can_manage = is_admin or (trans.user and trans.app.security_agent.can_manage_dataset(current_user_roles, content_item.library_dataset_dataset_association.dataset)) - - nice_size = util.nice_size(int(content_item.library_dataset_dataset_association.get_size())) + raw_size = int(content_item.library_dataset_dataset_association.get_size()) + nice_size = util.nice_size(raw_size) library_dataset_dict = content_item.to_dict() encoded_ldda_id = trans.security.encode_id(content_item.library_dataset_dataset_association.id) @@ -117,6 +117,7 @@ class FolderContentsController(BaseAPIController, UsesLibraryMixin, UsesLibraryM can_manage=can_manage, state=library_dataset_dict['state'], file_size=nice_size, + raw_size=raw_size, ldda_id=encoded_ldda_id)) if content_item.library_dataset_dataset_association.message: return_item.update(dict(message=content_item.library_dataset_dataset_association.message)) From 503ab30330f3977ef5eeef0224d3e984a76afe37 Mon Sep 17 00:00:00 2001 From: Brad Langhorst Date: Sat, 6 Jul 2019 08:44:09 -0400 Subject: [PATCH 2/3] consistent naming of fields between edit and list views --- client/galaxy/scripts/mvc/library/library-dataset-view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/galaxy/scripts/mvc/library/library-dataset-view.js b/client/galaxy/scripts/mvc/library/library-dataset-view.js index bd16d475e7f..53c6d30eb6f 100644 --- a/client/galaxy/scripts/mvc/library/library-dataset-view.js +++ b/client/galaxy/scripts/mvc/library/library-dataset-view.js @@ -741,7 +741,7 @@ var LibraryDatasetView = Backbone.View.extend({ <% } %> <% if (item.get("message")) { %> - Message + Description <%= _.escape(item.get("message")) %> <% } %> From 8e742846bdf3e24f97f52fe7a1dbce0ba56f7cc8 Mon Sep 17 00:00:00 2001 From: Brad Langhorst Date: Sat, 6 Jul 2019 09:37:35 -0400 Subject: [PATCH 3/3] Whups! --- client/galaxy/scripts/mvc/library/library-folderlist-view.js | 1 - 1 file changed, 1 deletion(-) diff --git a/client/galaxy/scripts/mvc/library/library-folderlist-view.js b/client/galaxy/scripts/mvc/library/library-folderlist-view.js index 7fb0c1d36dd..f55714b96cb 100644 --- a/client/galaxy/scripts/mvc/library/library-folderlist-view.js +++ b/client/galaxy/scripts/mvc/library/library-folderlist-view.js @@ -273,7 +273,6 @@ var FolderListView = Backbone.View.extend({ event.preventDefault(); this.current_sort_order = this.current_sort_order === "asc" ? "desc" : "asc"; this.current_sort_key = event.currentTarget.className.replace("sort-folder-", ""); - console.log("current sort: " + this.current_sort_key) this.collection.sortFolder(this.current_sort_key, this.current_sort_order); this.renderSortIcon(); },