Secondary sorting on series list

New: Sort by title as secondary sort on series list
This commit is contained in:
Mark McDowall 2014-12-13 00:12:26 -08:00
parent a9171d44d9
commit ecc8ece1ce
2 changed files with 96 additions and 7 deletions

View File

@ -6,6 +6,16 @@ define(
return function () { 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 () { this.prototype._getSortMappings = function () {
var result = {}; var result = {};
@ -30,13 +40,90 @@ define(
return sortMappings[key] || { name: key, sortKey: key }; return sortMappings[key] || { name: key, sortKey: key };
}; };
var originalSetSorting = this.prototype.setSorting; this.prototype._getSecondarySorting = function () {
this.prototype.setSorting = function (sortKey, order, options) { var sortKey = this.state.secondarySortKey;
var sortOrder = this.state.secondarySortOrder || -1;
if (!sortKey || sortKey === this.state.sortKey) {
return null;
}
var sortMapping = this._getSortMapping(sortKey); 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; return this;

View File

@ -17,9 +17,11 @@ define(
tableName: 'series', tableName: 'series',
state: { state: {
sortKey: 'sortTitle', sortKey : 'sortTitle',
order : -1, order : -1,
pageSize: 100000 pageSize : 100000,
secondarySortKey : 'sortTitle',
secondarySortOrder : -1
}, },
mode: 'client', mode: 'client',