MCPcopy Create free account
hub / github.com/bclinkinbeard/angular / orderByFilter

Function orderByFilter

test/fixtures/foo.js:15556–15615  ·  view source on GitHub ↗
($parse)

Source from the content-addressed store, hash-verified

15554 */
15555orderByFilter.$inject = ['$parse'];
15556function orderByFilter($parse){
15557 return function(array, sortPredicate, reverseOrder) {
15558 if (!isArray(array)) return array;
15559 if (!sortPredicate) return array;
15560 sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate];
15561 sortPredicate = map(sortPredicate, function(predicate){
15562 var descending = false, get = predicate || identity;
15563 if (isString(predicate)) {
15564 if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {
15565 descending = predicate.charAt(0) == '-';
15566 predicate = predicate.substring(1);
15567 }
15568 get = $parse(predicate);
15569 if (get.constant) {
15570 var key = get();
15571 return reverseComparator(function(a,b) {
15572 return compare(a[key], b[key]);
15573 }, descending);
15574 }
15575 }
15576 return reverseComparator(function(a,b){
15577 return compare(get(a),get(b));
15578 }, descending);
15579 });
15580 var arrayCopy = [];
15581 for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); }
15582 return arrayCopy.sort(reverseComparator(comparator, reverseOrder));
15583
15584 function comparator(o1, o2){
15585 for ( var i = 0; i < sortPredicate.length; i++) {
15586 var comp = sortPredicate[i](o1, o2);
15587 if (comp !== 0) return comp;
15588 }
15589 return 0;
15590 }
15591 function reverseComparator(comp, descending) {
15592 return toBoolean(descending)
15593 ? function(a,b){return comp(b,a);}
15594 : comp;
15595 }
15596 function compare(v1, v2){
15597 var t1 = typeof v1;
15598 var t2 = typeof v2;
15599 if (t1 == t2) {
15600 if (isDate(v1) && isDate(v2)) {
15601 v1 = v1.valueOf();
15602 v2 = v2.valueOf();
15603 }
15604 if (t1 == "string") {
15605 v1 = v1.toLowerCase();
15606 v2 = v2.toLowerCase();
15607 }
15608 if (v1 === v2) return 0;
15609 return v1 < v2 ? -1 : 1;
15610 } else {
15611 return t1 < t2 ? -1 : 1;
15612 }
15613 }

Callers

nothing calls this directly

Calls 4

mapFunction · 0.85
isStringFunction · 0.85
reverseComparatorFunction · 0.85
compareFunction · 0.85

Tested by

no test coverage detected