From 0f4bfd7afc4476d6855141b77bc9ed6f6352f34e Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 25 Sep 2013 20:49:22 -0700 Subject: [PATCH] Quality sorting for ManualSearch --- UI/Cells/Header/QualityHeaderCell.js | 69 ++++++++++++++++++++++++++++ UI/Episode/Search/ManualLayout.js | 14 +++--- UI/Release/Collection.js | 10 ++-- UI/Shared/Grid/DateHeaderCell.js | 8 ++-- 4 files changed, 85 insertions(+), 16 deletions(-) create mode 100644 UI/Cells/Header/QualityHeaderCell.js diff --git a/UI/Cells/Header/QualityHeaderCell.js b/UI/Cells/Header/QualityHeaderCell.js new file mode 100644 index 000000000..533386cb2 --- /dev/null +++ b/UI/Cells/Header/QualityHeaderCell.js @@ -0,0 +1,69 @@ +'use strict'; + +define( + [ + 'backgrid', + 'Shared/Grid/HeaderCell' + ], function (Backgrid, NzbDroneHeaderCell) { + + Backgrid.QualityHeaderCell = NzbDroneHeaderCell.extend({ + events: { + 'click': 'onClick' + }, + + onClick: function (e) { + e.preventDefault(); + + var self = this; + var columnName = this.column.get('name'); + + if (this.column.get('sortable')) { + if (this.direction() === 'ascending') { + this.sort(columnName, 'descending', function (left, right) { + var leftVal = left.get(columnName); + var rightVal = right.get(columnName); + + return self._comparator(leftVal, rightVal); + }); + } + else { + this.sort(columnName, 'ascending', function (left, right) { + var leftVal = left.get(columnName); + var rightVal = right.get(columnName); + + return self._comparator(rightVal, leftVal); + }); + } + } + }, + + _comparator: function (leftVal, rightVal) { + var leftWeight = leftVal.quality.weight; + var rightWeight = rightVal.quality.weight; + + if (!leftWeight && !rightWeight) { + return 0; + } + + if (!leftWeight) { + return -1; + } + + if (!rightWeight) { + return 1; + } + + if (leftWeight === rightWeight) { + return 0; + } + + if (leftWeight > rightWeight) { + return -1; + } + + return 1; + } + }); + + return Backgrid.QualityHeaderCell; + }); diff --git a/UI/Episode/Search/ManualLayout.js b/UI/Episode/Search/ManualLayout.js index 8647b4c2a..c782179df 100644 --- a/UI/Episode/Search/ManualLayout.js +++ b/UI/Episode/Search/ManualLayout.js @@ -6,9 +6,10 @@ define( 'Cells/FileSizeCell', 'Cells/QualityCell', 'Cells/ApprovalStatusCell', - 'Release/DownloadReportCell' + 'Release/DownloadReportCell', + 'Cells/Header/QualityHeaderCell' - ], function (Marionette, Backgrid, FileSizeCell, QualityCell, ApprovalStatusCell, DownloadReportCell) { + ], function (Marionette, Backgrid, FileSizeCell, QualityCell, ApprovalStatusCell, DownloadReportCell, QualityHeaderCell) { return Marionette.Layout.extend({ template: 'Episode/Search/ManualLayoutTemplate', @@ -44,10 +45,11 @@ define( cell : FileSizeCell }, { - name : 'quality', - label : 'Quality', - sortable: true, - cell : QualityCell + name : 'quality', + label : 'Quality', + sortable : true, + cell : QualityCell, + headerCell: QualityHeaderCell }, { diff --git a/UI/Release/Collection.js b/UI/Release/Collection.js index 93ec60c15..fb2a2ec63 100644 --- a/UI/Release/Collection.js +++ b/UI/Release/Collection.js @@ -1,15 +1,13 @@ 'use strict'; define( [ - 'Release/Model', - 'backbone.pageable' - ], function (ReleaseModel, PagableCollection) { - return PagableCollection.extend({ + 'backbone', + 'Release/Model' + ], function (Backbone, ReleaseModel) { + return Backbone.Collection.extend({ url : window.NzbDrone.ApiRoot + '/release', model: ReleaseModel, - mode: 'client', - state: { pageSize: 2000 }, diff --git a/UI/Shared/Grid/DateHeaderCell.js b/UI/Shared/Grid/DateHeaderCell.js index 5473f1093..fcc3e2ba4 100644 --- a/UI/Shared/Grid/DateHeaderCell.js +++ b/UI/Shared/Grid/DateHeaderCell.js @@ -23,7 +23,7 @@ define( var leftVal = left.get(columnName); var rightVal = right.get(columnName); - return self._comparator(leftVal, rightVal) + return self._comparator(leftVal, rightVal); }); } else { @@ -31,7 +31,7 @@ define( var leftVal = left.get(columnName); var rightVal = right.get(columnName); - return self._comparator(rightVal, leftVal) + return self._comparator(rightVal, leftVal); }); } } @@ -39,7 +39,7 @@ define( _comparator: function (leftVal, rightVal) { if (!leftVal && !rightVal) { - return 0 + return 0; } if (!leftVal) { @@ -47,7 +47,7 @@ define( } if (!rightVal) { - return 1 + return 1; } if (leftVal === rightVal) {