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() {}
|
||
|
};
|