diff -r d334a616c023 -r e16a97fb364a src/cm/media/js/lib/yui/yui3-3.15.0/build/parallel/parallel.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui3-3.15.0/build/parallel/parallel.js Mon Mar 10 15:19:48 2014 +0100 @@ -0,0 +1,107 @@ +YUI.add('parallel', function (Y, NAME) { + + +/** +* A concurrent parallel processor to help in running several async functions. +* @module parallel +* @main parallel +*/ + +/** +A concurrent parallel processor to help in running several async functions. + + var stack = new Y.Parallel(); + + for (var i = 0; i < 15; i++) { + Y.io('./api/json/' + i, { + on: { + success: stack.add(function() { + }) + } + }); + } + + stack.done(function() { + }); + +@class Parallel +@param {Object} o A config object +@param {Object} [o.context=Y] The execution context of the callback to done + + +*/ + +Y.Parallel = function(o) { + this.config = o || {}; + this.results = []; + this.context = this.config.context || Y; + this.total = 0; + this.finished = 0; +}; + +Y.Parallel.prototype = { + /** + * An Array of results from all the callbacks in the stack + * @property results + * @type Array + */ + + results: null, + /** + * The total items in the stack + * @property total + * @type Number + */ + total: null, + /** + * The number of stacked callbacks executed + * @property finished + * @type Number + */ + finished: null, + /** + * Add a callback to the stack + * @method add + * @param {Function} fn The function callback we are waiting for + */ + add: function (fn) { + var self = this, + index = self.total; + + self.total += 1; + + return function () { + self.finished++; + self.results[index] = (fn && fn.apply(self.context, arguments)) || + (arguments.length === 1 ? arguments[0] : Y.Array(arguments)); + + self.test(); + }; + }, + /** + * Test to see if all registered items in the stack have completed, if so call the callback to `done` + * @method test + */ + test: function () { + var self = this; + if (self.finished >= self.total && self.callback) { + self.callback.call(self.context, self.results, self.data); + } + }, + /** + * The method to call when all the items in the stack are complete. + * @method done + * @param {Function} callback The callback to execute on complete + * @param {Mixed} callback.results The results of all the callbacks in the stack + * @param {Mixed} [callback.data] The data given to the `done` method + * @param {Mixed} data Mixed data to pass to the success callback + */ + done: function (callback, data) { + this.callback = callback; + this.data = data; + this.test(); + } +}; + + +}, '@VERSION@', {"requires": ["yui-base"]});