34 lines
		
	
	
		
			789 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
		
			789 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /* | ||
|  |  * See example/counting.html | ||
|  |  */ | ||
|  | 
 | ||
|  | Zone['countingZoneSpec'] = { | ||
|  |   name: 'counterZone', | ||
|  |   // setTimeout
 | ||
|  |   onScheduleTask: function(delegate, current, target, task) { | ||
|  |     this.data.count += 1; | ||
|  |     delegate.scheduleTask(target, task); | ||
|  |   }, | ||
|  | 
 | ||
|  |   // fires when...
 | ||
|  |   // - clearTimeout
 | ||
|  |   // - setTimeout finishes
 | ||
|  |   onInvokeTask: function(delegate, current, target, task, applyThis, applyArgs) { | ||
|  |     delegate.invokeTask(target, task, applyThis, applyArgs); | ||
|  |     this.data.count -= 1; | ||
|  |   }, | ||
|  | 
 | ||
|  |   onHasTask: function(delegate, current, target, hasTask) { | ||
|  |     if (this.data.count === 0 && !this.data.flushed) { | ||
|  |       this.data.flushed = true; | ||
|  |       target.run(this.onFlush); | ||
|  |     } | ||
|  |   }, | ||
|  | 
 | ||
|  |   counter: function() { return this.data.count; }, | ||
|  | 
 | ||
|  |   data: {count: 0, flushed: false}, | ||
|  | 
 | ||
|  |   onFlush: function() {} | ||
|  | }; |