|
330 | 330 | };
|
331 | 331 |
|
332 | 332 | // Task class/combinator
|
333 |
| - var Task = function( task ) { |
334 |
| - if ( task instanceof Task ) return task; |
335 |
| - if ( !(this instanceof Task) ) return new Task( task ); |
336 |
| - if ( 1 > arguments.length ) task = null; |
| 333 | + var Task = function( aTask ) { |
| 334 | + if ( aTask instanceof Task ) return aTask; |
| 335 | + if ( !(this instanceof Task) ) return new Task( aTask ); |
337 | 336 |
|
338 |
| - var self = this, aqueue = null, |
| 337 | + var self = this, aqueue = null, task = null, |
339 | 338 | onComplete = null, run_once = false,
|
340 | 339 | times = false, loop = false, recurse = false,
|
341 | 340 | until = false, untilNot = false,
|
342 | 341 | loopObject = null, repeatCounter = 0,
|
343 | 342 | repeatIncrement = 1, repeatTimes = null,
|
344 | 343 | repeatUntil = null, repeatUntilNot = null,
|
345 |
| - lastResult = undef, |
346 |
| - |
347 |
| - run = function( ) { |
348 |
| - lastResult = task( self ); |
349 |
| - run_once = true; |
350 |
| - return lastResult; |
351 |
| - } |
| 344 | + lastResult = undef, run |
352 | 345 | ;
|
353 | 346 |
|
354 |
| - self.task = function( t ) { |
355 |
| - task = t; |
356 |
| - return self; |
357 |
| - }; |
358 |
| - |
359 | 347 | self.queue = function( q ) {
|
360 | 348 | if ( arguments.length )
|
361 | 349 | {
|
|
389 | 377 | }
|
390 | 378 | };
|
391 | 379 |
|
392 |
| - self.canRun = function( ) { |
393 |
| - if ( !task ) return false; |
394 |
| - if ( run_once && !times && !loop && !recurse && !until && !untilNot ) return false; |
395 |
| - if ( (times || loop) && repeatCounter >= repeatTimes ) return false; |
396 |
| - if ( loop && !loopObject ) return false; |
397 |
| - if ( (recurse || until) && lastResult === repeatUntil ) return false; |
398 |
| - return true; |
| 380 | + self.task = function( t ) { |
| 381 | + task = t; |
| 382 | + /*task.jumpNext = self.jumpNext; |
| 383 | + task.abort = self.abort; |
| 384 | + task.dispose = self.dispose;*/ |
| 385 | + return self; |
399 | 386 | };
|
400 | 387 |
|
401 |
| - self.run = run; |
| 388 | + if ( aTask ) self.task( aTask ); |
| 389 | + |
| 390 | + self.run = run = function( ) { |
| 391 | + // add queue/task methods on task func itself |
| 392 | + // instead of passing "this" as task param |
| 393 | + // use task as "nfe" or "arguments.callee" or whatelse, |
| 394 | + task.jumpNext = self.jumpNext; |
| 395 | + task.abort = self.abort; |
| 396 | + task.dispose = self.dispose; |
| 397 | + lastResult = task( /*self*/ ); |
| 398 | + run_once = true; |
| 399 | + task.jumpNext = null; |
| 400 | + task.abort = null; |
| 401 | + task.dispose = null; |
| 402 | + return lastResult; |
| 403 | + }; |
402 | 404 |
|
403 | 405 | self.runWithArgs = function( args ) {
|
| 406 | + task.jumpNext = self.jumpNext; |
| 407 | + task.abort = self.abort; |
| 408 | + task.dispose = self.dispose; |
404 | 409 | lastResult = task.apply( null, args );
|
405 | 410 | run_once = true;
|
| 411 | + task.jumpNext = null; |
| 412 | + task.abort = null; |
| 413 | + task.dispose = null; |
406 | 414 | return lastResult;
|
407 | 415 | };
|
408 | 416 |
|
| 417 | + self.canRun = function( ) { |
| 418 | + if ( !task ) return false; |
| 419 | + if ( run_once && !times && !loop && !recurse && !until && !untilNot ) return false; |
| 420 | + if ( (times || loop) && repeatCounter >= repeatTimes ) return false; |
| 421 | + if ( loop && !loopObject ) return false; |
| 422 | + if ( (recurse || until) && lastResult === repeatUntil ) return false; |
| 423 | + return true; |
| 424 | + }; |
| 425 | + |
409 | 426 | self.iif = function( cond, if_true_task, else_task ) {
|
410 |
| - if ( cond ) task = if_true_task; |
411 |
| - else if ( arguments.length > 2 ) task = else_task; |
| 427 | + if ( cond ) self.task( if_true_task ); |
| 428 | + else if ( arguments.length > 2 ) self.task( else_task ); |
412 | 429 | return self;
|
413 | 430 | };
|
414 | 431 |
|
|
519 | 536 | return self;
|
520 | 537 | };
|
521 | 538 | };
|
522 |
| - /*Task.iif = function( ) { var args = slice(arguments), T = new Task( ); return T.iif.apply( T, args ); }; |
| 539 | + /*Task.iif = function( ) { var args = arguments, T = new Task( ); return T.iif.apply( T, args ); }; |
523 | 540 | Task.until = function( ) { var args = slice(arguments), T = new Task( args.pop() ); return T.until.apply( T, args ); };
|
524 | 541 | Task.untilNot = function( ) { var args = slice(arguments), T = new Task( args.pop() ); return T.untilNot.apply( T, args ); };
|
525 | 542 | Task.loop = function( ) { var args = slice(arguments), T = new Task( args.pop() ); return T.loop.apply( T, args ); };
|
|
718 | 735 | queue = queue || new Asynchronous( );
|
719 | 736 | var serialize = function( func ) {
|
720 | 737 | var serialized = function( ) {
|
721 |
| - var scope = this, args = slice( arguments ); |
| 738 | + var scope = this, args = arguments; |
722 | 739 | queue.step( function( ){ func.apply( scope, args ); } );
|
723 | 740 | if ( !queue.$running ) queue.run( LINEARISED );
|
724 | 741 | };
|
|
897 | 914 | }
|
898 | 915 |
|
899 | 916 | ,iif: function( ) {
|
900 |
| - var args = slice(arguments), T = new Task( ); |
| 917 | + var args = arguments, T = new Task( ); |
901 | 918 | return T.iif.apply( T, args );
|
902 | 919 | }
|
903 | 920 |
|
|
933 | 950 | }
|
934 | 951 |
|
935 | 952 | ,steps: function( ) {
|
936 |
| - var self = this, tasks = slice( arguments ), i, l; |
| 953 | + var self = this, tasks = arguments, i, l; |
937 | 954 | l = tasks.length;
|
938 | 955 | for (i=0; i<l; i++) self.step( tasks[ i ] );
|
939 | 956 | return self;
|
|
975 | 992 | if ( offset < queue.length )
|
976 | 993 | {
|
977 | 994 | if ( offset > 0 ) queue.splice( 0, offset );
|
978 |
| - self.run( self.$runmode, slice(arguments) ); |
| 995 | + self.run( self.$runmode, arguments ); |
979 | 996 | }
|
980 | 997 | return self;
|
981 | 998 | };
|
|
0 commit comments