src/cm/media/js/lib/yui/yui_3.10.3/build/parallel/parallel.js
author gibus
Tue, 16 Jul 2013 14:29:46 +0200
changeset 525 89ef5ed3c48b
permissions -rw-r--r--
Upgrades to yui 3.10.3
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('parallel', 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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
* A concurrent parallel processor to help in running several async functions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
* @module parallel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
* @main parallel
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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
A concurrent parallel processor to help in running several async functions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    var stack = new Y.Parallel();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    for (var i = 0; i < 15; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        Y.io('./api/json/' + i, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
            on: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
                success: stack.add(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
                })
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    stack.done(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
@class Parallel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
@param {Object} o A config object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
@param {Object} [o.context=Y] The execution context of the callback to done
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
Y.Parallel = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    this.config = o || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    this.results = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    this.context = this.config.context || Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
    this.total = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
    this.finished = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
Y.Parallel.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    * An Array of results from all the callbacks in the stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    * @property results
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    * @type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    results: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    * The total items in the stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    * @property total
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
    * @type Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    total: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    * The number of stacked callbacks executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    * @property finished
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    * @type Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    finished: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    * Add a callback to the stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    * @method add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    * @param {Function} fn The function callback we are waiting for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    add: function (fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
        var self = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
            index = self.total;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
        self.total += 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
        return function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
            self.finished++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
            self.results[index] = (fn && fn.apply(self.context, arguments)) ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
                (arguments.length === 1 ? arguments[0] : Y.Array(arguments));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
            self.test();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
    * Test to see if all registered items in the stack have completed, if so call the callback to `done`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    * @method test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    test: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
        var self = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
        if (self.finished >= self.total && self.callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
            self.callback.call(self.context, self.results, self.data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    * The method to call when all the items in the stack are complete.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    * @method done
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    * @param {Function} callback The callback to execute on complete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
    * @param {Mixed} callback.results The results of all the callbacks in the stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
    * @param {Mixed} [callback.data] The data given to the `done` method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    * @param {Mixed} data Mixed data to pass to the success callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
    done: function (callback, data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
        this.callback = callback;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
        this.data = data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
        this.test();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    }
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
}, '3.10.3', {"requires": ["yui-base"]});