src/cm/media/js/lib/yui/yui3.0.0/build/collection/collection-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('collection', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
 * Collection utilities beyond what is provided in the YUI core
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
 * @module collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
var L = Y.Lang, Native = Array.prototype, A = Y.Array;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
 * Adds the following array utilities to the YUI instance
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
 * (Y.Array).  This is in addition to the methods provided
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
 * in the core.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
 * @class YUI~array~extras
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
 * Returns the index of the last item in the array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
 * that contains the specified value, -1 if the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
 * value isn't found.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
 * method Array.lastIndexOf
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
 * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
 * @param a {Array} the array to search
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
 * @param val the value to search for
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
 * @return {int} the index of hte item that contains the value or -1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
A.lastIndexOf = (Native.lastIndexOf) ?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
    function(a ,val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        return a.lastIndexOf(val);    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
    } :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    function(a, val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        for (var i=a.length-1; i>=0; i=i-1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
            if (a[i] === val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
        return i;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
 * Returns a copy of the array with the duplicate entries removed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
 * @method Array.unique
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
 * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
 * @param a {Array} the array to find the subset of uniques for
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
 * @param sort {bool} flag to denote if the array is sorted or not. Defaults to false, the more general operation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
 * @return {Array} a copy of the array with duplicate entries removed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
A.unique = function(a, sort) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
    var b = a.slice(), i = 0, n = -1, item = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
    while (i < b.length) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
        item = b[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        while ((n = b.lastIndexOf(item)) !== i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
            b.splice(n, 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
        i += 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
    // Note: the sort option doesn't really belong here... I think it was added
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
    // because there was a way to fast path the two operations together.  That
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
    // implementation was not working, so I replaced it with the following.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
    // Leaving it in so that the API doesn't get broken.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
    if (sort) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
        if (L.isNumber(b[0])) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
            b.sort(A.numericSort);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
            b.sort();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
    return b;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
* Executes the supplied function on each item in the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
* Returns a new array containing the items that the supplied
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
* function returned true for.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
* @method Array.filter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
* @param a {Array} the array to iterate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
* @param f {Function} the function to execute on each item
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
* @param o Optional context object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
* @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
* @return {Array} The items on which the supplied function
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
* returned true. If no items matched an empty array is 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
* returned.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
A.filter = (Native.filter) ?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
    function(a, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
        return Native.filter.call(a, f, o);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
    } :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
    function(a, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
        var results = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
        A.each(a, function(item, i, a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
            if (f.call(o, item, i, a)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
                results.push(item);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
        return results;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
* The inverse of filter. Executes the supplied function on each item. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
* Returns a new array containing the items that the supplied
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
* function returned *false* for.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
* @method Array.reject
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
* @param a {Array} the array to iterate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
* @param f {Function} the function to execute on each item
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
* @param o Optional context object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
* @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
* @return {Array} The items on which the supplied function
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
* returned false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
A.reject = function(a, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
    return A.filter(a, function(item, i, a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
        return !f.call(o, item, i, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
* Executes the supplied function on each item in the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
* @method Array.every
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
* @param a {Array} the array to iterate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
* @param f {Function} the function to execute on each item
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
* @param o Optional context object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
* @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
* @return {boolean} true if every item in the array returns true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
* from the supplied function.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
A.every = (Native.every) ?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
    function(a, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
        return Native.every.call(a,f,o);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
    } :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
    function(a, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
        var l = a.length;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
        for (var i = 0; i < l; i=i+1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
            if (!f.call(o, a[i], i, a)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
        return true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
* Executes the supplied function on each item in the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
* @method Array.map
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
* @param a {Array} the array to iterate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
* @param f {Function} the function to execute on each item
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
* @param o Optional context object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
* @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
* @return {Array} A new array containing the return value
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
* of the supplied function for each item in the original
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
* array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
A.map = (Native.map) ? 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
    function(a, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        return Native.map.call(a, f, o);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
    } :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
    function(a, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
        var results = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
        A.each(a, function(item, i, a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
            results.push(f.call(o, item, i, a));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
        return results;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
* Executes the supplied function on each item in the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
* Reduce "folds" the array into a single value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
* @method Array.reduce
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
* @param a {Array} the array to iterate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
* @param init The initial value to start from
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
* @param f {Function} the function to execute on each item. It
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
* is responsible for returning the updated value of the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
* computation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
* @param o Optional context object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
* @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
* @return A value that results from iteratively applying the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
* supplied function to each element in the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
A.reduce = (Native.reduce) ?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
    function(a, init, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
        //Firefox's Array.reduce does not allow inclusion of a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
        //  thisObject, so we need to implement it manually
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
        return Native.reduce.call(a, function(init, item, i, a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
            return f.call(o, init, item, i, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
        }, init);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
    } :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
    function(a, init, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
        var r = init;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
        A.each(a, function (item, i, a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
            r = f.call(o, r, item, i, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
        return r;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
* Executes the supplied function on each item in the array,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
* searching for the first item that matches the supplied
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
* function.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
* @method Array.find
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
* @param a {Array} the array to search
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
* @param f {Function} the function to execute on each item. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
* Iteration is stopped as soon as this function returns true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
* on an item.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
* @param o Optional context object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
* @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
* @return {object} the first item that the supplied function
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
* returns true for, or null if it never returns true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
A.find = function(a, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
    var l = a.length;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
    for(var i=0; i < l; i++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
        if (f.call(o, a[i], i, a)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
            return a[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
    return null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
* Iterates over an array, returning a new array of all the elements
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
* that match the supplied regular expression
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
* @method Array.grep
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
* @param a {Array} a collection to iterate over
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
* @param pattern {RegExp} The regular expression to test against 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
* each item
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
* @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
* @return {Array} All the items in the collection that 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
* produce a match against the supplied regular expression. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
* If no items match, an empty array is returned.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
A.grep = function (a, pattern) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
    return A.filter(a, function (item, index) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
        return pattern.test(item);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
* Partitions an array into two new arrays, one with the items
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
* that match the supplied function, and one with the items that
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
* do not.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
* @method Array.partition
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
* @param a {Array} a collection to iterate over
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
* @paran f {Function} a function that will receive each item 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
* in the collection and its index.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
* @param o Optional execution context of f.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
* @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
* @return An object with two members, 'matches' and 'rejects',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
* that are arrays containing the items that were selected or 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
* rejected by the test function (or an empty array).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
A.partition = function (a, f, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
    var results = {matches: [], rejects: []};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
    A.each(a, function (item, index) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
        var set = f.call(o, item, index, a) ? results.matches : results.rejects;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
        set.push(item);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
    return results;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
* Creates an array of arrays by pairing the corresponding
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
* elements of two arrays together into a new array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
* @method Array.zip
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
* @param a {Array} a collection to iterate over
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
* @param a2 {Array} another collection whose members will be 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
* paired with members of the first parameter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
* @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
* @return An array of arrays formed by pairing each element 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
* of the first collection with an item in the second collection 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
* having the corresponding index.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
A.zip = function (a, a2) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
    var results = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
    A.each(a, function (item, index) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
        results.push([item, a2[index]]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
    return results;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
}, '3.0.0' );