mirror of
https://github.com/Sonarr/Sonarr
synced 2024-12-30 11:46:09 +00:00
Secondary sorting on series list
New: Sort by title as secondary sort on series list
This commit is contained in:
parent
a9171d44d9
commit
ecc8ece1ce
2 changed files with 96 additions and 7 deletions
|
@ -6,6 +6,16 @@ define(
|
|||
|
||||
return function () {
|
||||
|
||||
var originalSetSorting = this.prototype.setSorting;
|
||||
|
||||
this.prototype.setSorting = function (sortKey, order, options) {
|
||||
var sortMapping = this._getSortMapping(sortKey);
|
||||
|
||||
options = _.defaults({ sortValue: sortMapping.sortValue }, options || {});
|
||||
|
||||
return originalSetSorting.call(this, sortMapping.sortKey, order, options);
|
||||
};
|
||||
|
||||
this.prototype._getSortMappings = function () {
|
||||
var result = {};
|
||||
|
||||
|
@ -30,13 +40,90 @@ define(
|
|||
return sortMappings[key] || { name: key, sortKey: key };
|
||||
};
|
||||
|
||||
var originalSetSorting = this.prototype.setSorting;
|
||||
this.prototype.setSorting = function (sortKey, order, options) {
|
||||
this.prototype._getSecondarySorting = function () {
|
||||
var sortKey = this.state.secondarySortKey;
|
||||
var sortOrder = this.state.secondarySortOrder || -1;
|
||||
|
||||
if (!sortKey || sortKey === this.state.sortKey) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var sortMapping = this._getSortMapping(sortKey);
|
||||
|
||||
options = _.defaults({ sortValue: sortMapping.sortValue }, options || {});
|
||||
if (!sortMapping.sortValue) {
|
||||
sortMapping.sortValue = function (model, attr) {
|
||||
return model.get(attr);
|
||||
};
|
||||
}
|
||||
|
||||
return originalSetSorting.call(this, sortMapping.sortKey, order, options);
|
||||
return {
|
||||
key : sortKey,
|
||||
order : sortOrder,
|
||||
sortValue : sortMapping.sortValue
|
||||
};
|
||||
};
|
||||
|
||||
this.prototype._makeComparator = function (sortKey, order, sortValue) {
|
||||
var state = this.state;
|
||||
var secondarySorting = this._getSecondarySorting();
|
||||
|
||||
sortKey = sortKey || state.sortKey;
|
||||
order = order || state.order;
|
||||
|
||||
if (!sortKey || !order){
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sortValue) {
|
||||
sortValue = function (model, attr) {
|
||||
return model.get(attr);
|
||||
};
|
||||
}
|
||||
|
||||
return function (left, right) {
|
||||
var l = sortValue(left, sortKey);
|
||||
var r = sortValue(right, sortKey);
|
||||
var t;
|
||||
|
||||
if (order === 1) {
|
||||
t = l;
|
||||
l = r;
|
||||
r = t;
|
||||
}
|
||||
|
||||
if (l === r) {
|
||||
|
||||
if (secondarySorting) {
|
||||
var ls = secondarySorting.sortValue(left, secondarySorting.key);
|
||||
var rs = secondarySorting.sortValue(right, secondarySorting.key);
|
||||
var ts;
|
||||
|
||||
if (secondarySorting.order === 1) {
|
||||
ts = ls;
|
||||
ls = rs;
|
||||
rs = ts;
|
||||
}
|
||||
|
||||
if (ls === rs) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ls < rs) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
else if (l < r) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
};
|
||||
};
|
||||
|
||||
return this;
|
||||
|
|
|
@ -17,9 +17,11 @@ define(
|
|||
tableName: 'series',
|
||||
|
||||
state: {
|
||||
sortKey: 'sortTitle',
|
||||
order : -1,
|
||||
pageSize: 100000
|
||||
sortKey : 'sortTitle',
|
||||
order : -1,
|
||||
pageSize : 100000,
|
||||
secondarySortKey : 'sortTitle',
|
||||
secondarySortOrder : -1
|
||||
},
|
||||
|
||||
mode: 'client',
|
||||
|
|
Loading…
Reference in a new issue