($parse)
| 15554 | */ |
| 15555 | orderByFilter.$inject = ['$parse']; |
| 15556 | function 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 | } |
nothing calls this directly
no test coverage detected