123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /*
- * This file is part of the jquery plugin "asyncQueue".
- *
- * (c) Sebastien Roch <roch.sebastien@gmail.com>
- * @author (parallel) Dmitry Farafonov
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- (function($){
- $.AsyncQueue = function() {
- var that = this,
- queue = [],
- completeFunc,
- failureFunc,
- paused = false,
- lastCallbackData,
- _run,
- _complete,
- inQueue = 0,
- defaultTimeOut = 10;
- _run = function() {
- var f = queue.shift();
- if (f) {
- inQueue++;
- setTimeout(function(){
- f.fn.apply(that, [that]);
-
- if (!f.isParallel)
- if (paused === false) {
- _run();
- }
- inQueue --;
- if (inQueue == 0 && queue.length == 0)
- _complete();
- }, f.timeOut);
-
- if (f.isParallel)
- if (paused === false) {
- _run();
- }
- }
- };
-
- _complete = function(){
- if (completeFunc)
- completeFunc.apply(that, [that]);
- };
- this.onComplete = function(func) {
- completeFunc = func;
- };
-
- this.onFailure = function(func) {
- failureFunc = func;
- };
- this.add = function(func) {
- // TODO: add callback for queue[i] complete
-
- var obj = arguments[0];
- if (obj && Object.prototype.toString.call(obj) === "[object Array]") {
- var fn = arguments[1];
- var timeOut = (typeof(arguments[2]) != "undefined")? arguments[2] : defaultTimeOut;
- if (typeof(fn) == "function") {
- for(var i = 0; i < obj.length; i++) {
- var f = function(objx){
- queue.push({isParallel: true, fn: function(){fn.apply(that, [that, objx]);}, timeOut: timeOut});
- }(obj[i])
- }
- }
- } else {
- var fn = arguments[0];
- var timeOut = (typeof(arguments[1]) != "undefined")? arguments[2] : defaultTimeOut;
- queue.push({isParallel: false, fn: func, timeOut: timeOut});
- }
- return this;
- };
-
- this.addParallel = function(func, timeOut) {
- // TODO: add callback for queue[i] complete
-
- queue.push({isParallel: true, fn: func, timeOut: timeOut});
- return this;
- };
- this.storeData = function(dataObject) {
- lastCallbackData = dataObject;
- return this;
- };
- this.lastCallbackData = function () {
- return lastCallbackData;
- };
- this.run = function() {
- paused = false;
- _run();
- };
- this.pause = function () {
- paused = true;
- return this;
- };
- this.failure = function() {
- paused = true;
- if (failureFunc) {
- var args = [that];
- for(i = 0; i < arguments.length; i++) {
- args.push(arguments[i]);
- }
- failureFunc.apply(that, args);
- }
- };
-
- this.size = function(){
- return queue.length;
- };
- return this;
- }
- })(jQuery);
|