src/cm/media/js/lib/yui/yui3-3.15.0/build/parallel/parallel.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('parallel', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
* A concurrent parallel processor to help in running several async functions.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
* @module parallel
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
* @main parallel
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
A concurrent parallel processor to help in running several async functions.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
    var stack = new Y.Parallel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
    for (var i = 0; i < 15; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
        Y.io('./api/json/' + i, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
            on: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
                success: stack.add(function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
                })
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
    stack.done(function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
@class Parallel
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
@param {Object} o A config object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
@param {Object} [o.context=Y] The execution context of the callback to done
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
Y.Parallel = function(o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
    this.config = o || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    this.results = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
    this.context = this.config.context || Y;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
    this.total = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
    this.finished = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
Y.Parallel.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
    * An Array of results from all the callbacks in the stack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
    * @property results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
    * @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
    results: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
    * The total items in the stack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
    * @property total
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
    * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
    total: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
    * The number of stacked callbacks executed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
    * @property finished
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
    * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
    finished: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
    * Add a callback to the stack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
    * @method add
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
    * @param {Function} fn The function callback we are waiting for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
    add: function (fn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
        var self = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
            index = self.total;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
        self.total += 1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
        return function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
            self.finished++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
            self.results[index] = (fn && fn.apply(self.context, arguments)) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
                (arguments.length === 1 ? arguments[0] : Y.Array(arguments));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
            self.test();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
    * Test to see if all registered items in the stack have completed, if so call the callback to `done`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
    * @method test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
    test: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
        var self = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
        if (self.finished >= self.total && self.callback) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
            self.callback.call(self.context, self.results, self.data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
    * The method to call when all the items in the stack are complete.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
    * @method done
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
    * @param {Function} callback The callback to execute on complete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
    * @param {Mixed} callback.results The results of all the callbacks in the stack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
    * @param {Mixed} [callback.data] The data given to the `done` method
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
    * @param {Mixed} data Mixed data to pass to the success callback
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
    done: function (callback, data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
        this.callback = callback;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
        this.data = data;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
        this.test();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
}, '@VERSION@', {"requires": ["yui-base"]});