src/cm/media/js/lib/yui/yui_3.10.3/build/array-extras/array-extras.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('array-extras', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
Adds additional utility methods to the `Y.Array` class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
@module collection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
@submodule array-extras
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
var A          = Y.Array,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
    L          = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    ArrayProto = Array.prototype;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
Returns the index of the last item in the array that contains the specified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
value, or `-1` if the value isn't found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
@method lastIndexOf
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
@param {Array} a Array to search in.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
@param {Any} val Value to search for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
@param {Number} [fromIndex] Index at which to start searching backwards.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
  Defaults to the array's length - 1. If negative, it will be taken as an offset
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
  from the end of the array. If the calculated index is less than 0, the array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
  will not be searched and `-1` will be returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
@return {Number} Index of the item that contains the value, or `-1` if not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
  found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
@for Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
A.lastIndexOf = L._isNative(ArrayProto.lastIndexOf) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    function(a, val, fromIndex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
        // An undefined fromIndex is still considered a value by some (all?)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
        // native implementations, so we can't pass it unless it's actually
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
        // specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
        return fromIndex || fromIndex === 0 ? a.lastIndexOf(val, fromIndex) :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
                a.lastIndexOf(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
    function(a, val, fromIndex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
        var len = a.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
            i   = len - 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
        if (fromIndex || fromIndex === 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
            i = Math.min(fromIndex < 0 ? len + fromIndex : fromIndex, len);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
        if (i > -1 && len > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
            for (; i > -1; --i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
                if (i in a && a[i] === val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
                    return i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
        return -1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
Returns a copy of the input array with duplicate items removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
Note: If the input array only contains strings, the `Y.Array.dedupe()` method is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
a much faster alternative.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
@method unique
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
@param {Array} array Array to dedupe.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
@param {Function} [testFn] Custom function to use to test the equality of two
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    values. A truthy return value indicates that the values are equal. A falsy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    return value indicates that the values are not equal.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    @param {Any} testFn.a First value to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    @param {Any} testFn.b Second value to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    @param {Number} testFn.index Index of the current item in the original
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
        array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
    @param {Array} testFn.array The original array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
    @return {Boolean} _true_ if the items are equal, _false_ otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
@return {Array} Copy of the input array with duplicate items removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
A.unique = function (array, testFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    var i       = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
        len     = array.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
        results = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
        j, result, resultLen, value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    // Note the label here. It's used to jump out of the inner loop when a value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
    // is not unique.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
    outerLoop: for (; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
        value = array[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
        // For each value in the input array, iterate through the result array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
        // and check for uniqueness against each result value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
        for (j = 0, resultLen = results.length; j < resultLen; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
            result = results[j];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
            // If the test function returns true or there's no test function and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            // the value equals the current result item, stop iterating over the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
            // results and continue to the next value in the input array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
            if (testFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
                if (testFn.call(array, value, result, i, array)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
                    continue outerLoop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
            } else if (value === result) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
                continue outerLoop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
        // If we get this far, that means the current value is not already in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
        // the result array, so add it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
        results.push(value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    return results;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
Executes the supplied function on each item in the array. Returns a new array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
containing the items for which the supplied function returned a truthy value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
@method filter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
@param {Array} a Array to filter.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
@param {Function} f Function to execute on each item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
@param {Object} [o] Optional context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
@return {Array} Array of items for which the supplied function returned a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
  truthy value (empty if it never returned a truthy value).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
A.filter = L._isNative(ArrayProto.filter) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    function(a, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
        return ArrayProto.filter.call(a, f, o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    function(a, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        var i       = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
            len     = a.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
            results = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
            item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        for (; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
            if (i in a) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
                item = a[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
                if (f.call(o, item, i, a)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
                    results.push(item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
        return results;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
The inverse of `Array.filter()`. Executes the supplied function on each item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
Returns a new array containing the items for which the supplied function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
returned `false`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
@method reject
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
@param {Array} a the array to iterate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
@param {Function} f the function to execute on each item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
@param {object} [o] Optional context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
@return {Array} The items for which the supplied function returned `false`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
A.reject = function(a, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
    return A.filter(a, function(item, i, a) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
        return !f.call(o, item, i, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
Executes the supplied function on each item in the array. Iteration stops if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
supplied function does not return a truthy value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
@method every
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
@param {Array} a the array to iterate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
@param {Function} f the function to execute on each item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
@param {Object} [o] Optional context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
@return {Boolean} `true` if every item in the array returns `true` from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
  supplied function, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
A.every = L._isNative(ArrayProto.every) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    function(a, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
        return ArrayProto.every.call(a, f, o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
    } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
    function(a, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
        for (var i = 0, l = a.length; i < l; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
            if (i in a && !f.call(o, a[i], i, a)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
        return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
Executes the supplied function on each item in the array and returns a new array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
containing all the values returned by the supplied function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
    // Convert an array of numbers into an array of strings.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
    Y.Array.map([1, 2, 3, 4], function (item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
      return '' + item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
    // => ['1', '2', '3', '4']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
@method map
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
@param {Array} a the array to iterate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
@param {Function} f the function to execute on each item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
@param {object} [o] Optional context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
@return {Array} A new array containing the return value of the supplied function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
  for each item in the original array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
A.map = L._isNative(ArrayProto.map) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
    function(a, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
        return ArrayProto.map.call(a, f, o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
    } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
    function(a, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
        var i       = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
            len     = a.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
            results = ArrayProto.concat.call(a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
        for (; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
            if (i in a) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
                results[i] = f.call(o, a[i], i, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
        return results;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
Executes the supplied function on each item in the array, "folding" the array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
into a single value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
@method reduce
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
@param {Array} a Array to iterate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
@param {Any} init Initial value to start with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
@param {Function} f Function to execute on each item. This function should
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
  update and return the value of the computation. It will receive the following
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
  arguments:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
    @param {Any} f.previousValue Value returned from the previous iteration,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
      or the initial value if this is the first iteration.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    @param {Any} f.currentValue Value of the current item being iterated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    @param {Number} f.index Index of the current item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
    @param {Array} f.array Array being iterated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
@param {Object} [o] Optional context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
@return {Any} Final result from iteratively applying the given function to each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
  element in the array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
A.reduce = L._isNative(ArrayProto.reduce) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
    function(a, init, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
        // ES5 Array.reduce doesn't support a thisObject, so we need to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
        // implement it manually.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
        return ArrayProto.reduce.call(a, function(init, item, i, a) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
            return f.call(o, init, item, i, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
        }, init);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
    } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
    function(a, init, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
        var i      = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
            len    = a.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
            result = init;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        for (; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
            if (i in a) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
                result = f.call(o, result, a[i], i, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
        return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
Executes the supplied function on each item in the array, searching for the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
first item that matches the supplied function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
@method find
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
@param {Array} a the array to search.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
@param {Function} f the function to execute on each item. Iteration is stopped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
  as soon as this function returns `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
@param {Object} [o] Optional context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
@return {Object} the first item that the supplied function returns `true` for,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
  or `null` if it never returns `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
A.find = function(a, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
    for (var i = 0, l = a.length; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
        if (i in a && f.call(o, a[i], i, a)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
            return a[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
    return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
Iterates over an array, returning a new array of all the elements that match the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
supplied regular expression.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
@method grep
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
@param {Array} a Array to iterate over.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
@param {RegExp} pattern Regular expression to test against each item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
@return {Array} All the items in the array that produce a match against the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
  supplied regular expression. If no items match, an empty array is returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
A.grep = function(a, pattern) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
    return A.filter(a, function(item, index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
        return pattern.test(item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
Partitions an array into two new arrays, one with the items for which the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
supplied function returns `true`, and one with the items for which the function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
returns `false`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
@method partition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
@param {Array} a Array to iterate over.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
@param {Function} f Function to execute for each item in the array. It will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
  receive the following arguments:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
    @param {Any} f.item Current item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
    @param {Number} f.index Index of the current item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
    @param {Array} f.array The array being iterated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
@param {Object} [o] Optional execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
@return {Object} An object with two properties: `matches` and `rejects`. Each is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
  an array containing the items that were selected or rejected by the test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
  function (or an empty array if none).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
A.partition = function(a, f, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
    var results = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
        matches: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
        rejects: []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
    A.each(a, function(item, index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
        var set = f.call(o, item, index, a) ? results.matches : results.rejects;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
        set.push(item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
    return results;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
Creates an array of arrays by pairing the corresponding elements of two arrays
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
together into a new array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
@method zip
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
@param {Array} a Array to iterate over.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
@param {Array} a2 Another array whose values will be paired with values of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
  first array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
@return {Array} An array of arrays formed by pairing each element of the first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
  array with an item in the second array having the corresponding index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
A.zip = function(a, a2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
    var results = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
    A.each(a, function(item, index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
        results.push([item, a2[index]]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
    return results;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
Flattens an array of nested arrays at any abitrary depth into a single, flat
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
@method flatten
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
@param {Array} a Array with nested arrays to flatten.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
@return {Array} An array whose nested arrays have been flattened.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
@since 3.7.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
A.flatten = function(a) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
    var result = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
        i, len, val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
    // Always return an array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
    if (!a) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
        return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
    for (i = 0, len = a.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
        val = a[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
        if (L.isArray(val)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
            // Recusively flattens any nested arrays.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
            result.push.apply(result, A.flatten(val));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
            result.push(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
    return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
}, '3.10.3', {"requires": ["yui-base"]});