diff options
| author | Misko Hevery | 2011-06-20 13:50:46 -0700 | 
|---|---|---|
| committer | Igor Minar | 2011-06-23 08:12:01 -0700 | 
| commit | b74163dc1d321b878222a751f23adb0a9f6beda5 (patch) | |
| tree | e42f66a63caadf94c4bd74530062cc5deee6469b /src | |
| parent | bad62d87a1785f11b0df72ad597b9064517997cf (diff) | |
| download | angular.js-b74163dc1d321b878222a751f23adb0a9f6beda5.tar.bz2 | |
fix:$orderBy - return unsorted array if no predicate
Closes #399
Diffstat (limited to 'src')
| -rw-r--r-- | src/apis.js | 54 | 
1 files changed, 26 insertions, 28 deletions
diff --git a/src/apis.js b/src/apis.js index 1e1bcae1..ce40517a 100644 --- a/src/apis.js +++ b/src/apis.js @@ -581,18 +581,17 @@ var angularArray = {                                    {name:'Adam', phone:'555-5678', age:35},                                    {name:'Julie', phone:'555-8765', age:29}]"></div> -         <pre>Sorting predicate = {{predicate}}</pre> +         <pre>Sorting predicate = {{predicate}} reverse = {{reverse}}</pre>           <hr/> +         [ <a href="" ng:click="predicate=''">unsorted</a> ]           <table ng:init="predicate='-age'">             <tr> -             <th><a href="" ng:click="predicate = 'name'">Name</a> -                 (<a href ng:click="predicate = '-name'">^</a>)</th> -             <th><a href="" ng:click="predicate = 'phone'">Phone</a> -                 (<a href ng:click="predicate = '-phone'">^</a>)</th> -             <th><a href="" ng:click="predicate = 'age'">Age</a> -                 (<a href ng:click="predicate = '-age'">^</a>)</th> +             <th><a href="" ng:click="predicate = 'name'; reverse=false">Name</a> +                 (<a href ng:click="predicate = '-name'; reverse=false">^</a>)</th> +             <th><a href="" ng:click="predicate = 'phone'; reverse=!reverse">Phone</a></th> +             <th><a href="" ng:click="predicate = 'age'; reverse=!reverse">Age</a></th>             <tr> -           <tr ng:repeat="friend in friends.$orderBy(predicate)"> +           <tr ng:repeat="friend in friends.$orderBy(predicate, reverse)">               <td>{{friend.name}}</td>               <td>{{friend.phone}}</td>               <td>{{friend.age}}</td> @@ -615,7 +614,7 @@ var angularArray = {             expect(repeater('.doc-example-live table', 'friend in friends').column('friend.age')).               toEqual(['35', '10', '29', '19', '21']); -           element('.doc-example-live a:contains("Phone")+a:contains("^")').click(); +           element('.doc-example-live a:contains("Phone")').click();             expect(repeater('.doc-example-live table', 'friend in friends').column('friend.phone')).               toEqual(['555-9876', '555-8765', '555-5678', '555-4321', '555-1212']);             expect(repeater('.doc-example-live table', 'friend in friends').column('friend.name')). @@ -624,35 +623,34 @@ var angularArray = {         </doc:scenario>       </doc:example>     */ -  //TODO: WTH is descend param for and how/when it should be used, how is it affected by +/- in -  //      predicate? the code below is impossible to read and specs are not very good. -  'orderBy':function(array, expression, descend) { -    expression = isArray(expression) ? expression: [expression]; -    expression = map(expression, function($){ -      var descending = false, get = $ || identity; -      if (isString($)) { -        if (($.charAt(0) == '+' || $.charAt(0) == '-')) { -          descending = $.charAt(0) == '-'; -          $ = $.substring(1); +  'orderBy':function(array, sortPredicate, reverseOrder) { +    if (!sortPredicate) return array; +    sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate]; +    sortPredicate = map(sortPredicate, function(predicate){ +      var descending = false, get = predicate || identity; +      if (isString(predicate)) { +        if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) { +          descending = predicate.charAt(0) == '-'; +          predicate = predicate.substring(1);          } -        get = expressionCompile($).fnSelf; +        get = expressionCompile(predicate).fnSelf;        } -      return reverse(function(a,b){ +      return reverseComparator(function(a,b){          return compare(get(a),get(b));        }, descending);      });      var arrayCopy = [];      for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); } -    return arrayCopy.sort(reverse(comparator, descend)); +    return arrayCopy.sort(reverseComparator(comparator, reverseOrder));      function comparator(o1, o2){ -      for ( var i = 0; i < expression.length; i++) { -        var comp = expression[i](o1, o2); +      for ( var i = 0; i < sortPredicate.length; i++) { +        var comp = sortPredicate[i](o1, o2);          if (comp !== 0) return comp;        }        return 0;      } -    function reverse(comp, descending) { +    function reverseComparator(comp, descending) {        return toBoolean(descending)            ? function(a,b){return comp(b,a);}            : comp; @@ -813,7 +811,7 @@ var angularFunction = {   *  string is string   *  number is number as string   *  object is either call $hashKey function on object or assign unique hashKey id. - *  + *   * @param obj   * @returns {String} hash string such that the same input will have the same hash string   */ @@ -848,7 +846,7 @@ HashMap.prototype = {      this[_key] = value;      return oldValue;    }, -   +    /**     * @param key     * @returns the value for the key @@ -856,7 +854,7 @@ HashMap.prototype = {    get: function(key) {      return this[hashKey(key)];    }, -   +    /**     * Remove the key/value pair     * @param key  | 
