New file |
0,0 → 1,86 |
/* |
Copyright (c) 2004-2006, The Dojo Foundation |
All Rights Reserved. |
|
Licensed under the Academic Free License version 2.1 or above OR the |
modified BSD license. For more information on Dojo licensing, see: |
|
http://dojotoolkit.org/community/licensing.shtml |
*/ |
|
dojo.provide("dojo.widget.TreeTimeoutIterator"); |
dojo.require("dojo.event.*"); |
dojo.require("dojo.json"); |
dojo.require("dojo.io.*"); |
dojo.require("dojo.widget.TreeCommon"); |
dojo.declare("dojo.widget.TreeTimeoutIterator", null, function (elem, callFunc, callObj) { |
var _this = this; |
this.currentParent = elem; |
this.callFunc = callFunc; |
this.callObj = callObj ? callObj : this; |
this.stack = []; |
}, {maxStackDepth:Number.POSITIVE_INFINITY, stack:null, currentParent:null, currentIndex:0, filterFunc:function () { |
return true; |
}, finishFunc:function () { |
return true; |
}, setFilter:function (func, obj) { |
this.filterFunc = func; |
this.filterObj = obj; |
}, setMaxLevel:function (level) { |
this.maxStackDepth = level - 2; |
}, forward:function (timeout) { |
var _this = this; |
if (this.timeout) { |
var tid = setTimeout(function () { |
_this.processNext(); |
clearTimeout(tid); |
}, _this.timeout); |
} else { |
return this.processNext(); |
} |
}, start:function (processFirst) { |
if (processFirst) { |
return this.callFunc.call(this.callObj, this.currentParent, this); |
} |
return this.processNext(); |
}, processNext:function () { |
var handler; |
var _this = this; |
var found; |
var next; |
if (this.maxStackDepth == -2) { |
return; |
} |
while (true) { |
var children = this.currentParent.children; |
if (children && children.length) { |
do { |
next = children[this.currentIndex]; |
} while (this.currentIndex++ < children.length && !(found = this.filterFunc.call(this.filterObj, next))); |
if (found) { |
if (next.isFolder && this.stack.length <= this.maxStackDepth) { |
this.moveParent(next, 0); |
} |
return this.callFunc.call(this.callObj, next, this); |
} |
} |
if (this.stack.length) { |
this.popParent(); |
continue; |
} |
break; |
} |
return this.finishFunc.call(this.finishObj); |
}, setFinish:function (func, obj) { |
this.finishFunc = func; |
this.finishObj = obj; |
}, popParent:function () { |
var p = this.stack.pop(); |
this.currentParent = p[0]; |
this.currentIndex = p[1]; |
}, moveParent:function (nextParent, nextIndex) { |
this.stack.push([this.currentParent, this.currentIndex]); |
this.currentParent = nextParent; |
this.currentIndex = nextIndex; |
}}); |
|