mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-27 04:21:27 +02:00
133 lines
4.0 KiB
JavaScript
133 lines
4.0 KiB
JavaScript
'use strict';
|
|
|
|
define(
|
|
['underscore', 'Config'],
|
|
function (_, Config) {
|
|
|
|
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 = {};
|
|
|
|
if (this.sortMappings) {
|
|
_.each(this.sortMappings, function (values, key) {
|
|
var item = {
|
|
name: key,
|
|
sortKey: values.sortKey || key,
|
|
sortValue: values.sortValue
|
|
};
|
|
result[key] = item;
|
|
result[item.sortKey] = item;
|
|
});
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
this.prototype._getSortMapping = function (key) {
|
|
var sortMappings = this._getSortMappings();
|
|
|
|
return sortMappings[key] || { name: key, sortKey: key };
|
|
};
|
|
|
|
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);
|
|
|
|
if (!sortMapping.sortValue) {
|
|
sortMapping.sortValue = function (model, attr) {
|
|
return model.get(attr);
|
|
};
|
|
}
|
|
|
|
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;
|
|
};
|
|
}
|
|
);
|