| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | /*	Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.	Available via Academic Free License >= 2.1 OR the modified BSD license.	see: http://dojotoolkit.org/license for details*/if(!dojo._hasResource["dijit._Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dijit._Container"] = true;dojo.provide("dijit._Container");dojo.declare("dijit._Container",	null,	{		// summary:		//		Mixin for widgets that contain a set of widget children.		// description:		//		Use this mixin for widgets that needs to know about and		//		keep track of their widget children. Suitable for widgets like BorderContainer		//		and TabContainer which contain (only) a set of child widgets.		//		//		It's not suitable for widgets like ContentPane		//		which contains mixed HTML (plain DOM nodes in addition to widgets),		//		and where contained widgets are not necessarily directly below		//		this.containerNode.   In that case calls like addChild(node, position)		//		wouldn't make sense.		// isContainer: [protected] Boolean		//		Indicates that this widget acts as a "parent" to the descendant widgets.		//		When the parent is started it will call startup() on the child widgets.		//		See also `isLayoutContainer`.		isContainer: true,		buildRendering: function(){			this.inherited(arguments);			if(!this.containerNode){				// all widgets with descendants must set containerNode	 				this.containerNode = this.domNode;			}		},		addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){			// summary:			//		Makes the given widget a child of this widget.			// description:			//		Inserts specified child widget's dom node as a child of this widget's			//		container node, and possibly does other processing (such as layout).			var refNode = this.containerNode;			if(insertIndex && typeof insertIndex == "number"){				var children = this.getChildren();				if(children && children.length >= insertIndex){					refNode = children[insertIndex-1].domNode;					insertIndex = "after";				}			}			dojo.place(widget.domNode, refNode, insertIndex);			// If I've been started but the child widget hasn't been started,			// start it now.  Make sure to do this after widget has been			// inserted into the DOM tree, so it can see that it's being controlled by me,			// so it doesn't try to size itself.			if(this._started && !widget._started){				widget.startup();			}		},		removeChild: function(/*Widget or int*/ widget){			// summary:			//		Removes the passed widget instance from this widget but does			//		not destroy it.  You can also pass in an integer indicating			//		the index within the container to remove			if(typeof widget == "number"){				widget = this.getChildren()[widget];			}			if(widget){				var node = widget.domNode;				if(node && node.parentNode){					node.parentNode.removeChild(node); // detach but don't destroy				}			}		},		hasChildren: function(){			// summary:			//		Returns true if widget has children, i.e. if this.containerNode contains something.			return this.getChildren().length > 0;	// Boolean		},		destroyDescendants: function(/*Boolean*/ preserveDom){			// summary:			//      Destroys all the widgets inside this.containerNode,			//      but not this widget itself			dojo.forEach(this.getChildren(), function(child){ child.destroyRecursive(preserveDom); });		},		_getSiblingOfChild: function(/*dijit._Widget*/ child, /*int*/ dir){			// summary:			//		Get the next or previous widget sibling of child			// dir:			//		if 1, get the next sibling			//		if -1, get the previous sibling			// tags:			//      private			var node = child.domNode,				which = (dir>0 ? "nextSibling" : "previousSibling");			do{				node = node[which];			}while(node && (node.nodeType != 1 || !dijit.byNode(node)));			return node && dijit.byNode(node);	// dijit._Widget		},		getIndexOfChild: function(/*dijit._Widget*/ child){			// summary:			//		Gets the index of the child in this container or -1 if not found			return dojo.indexOf(this.getChildren(), child);	// int		},		startup: function(){			// summary:			//		Called after all the widgets have been instantiated and their			//		dom nodes have been inserted somewhere under dojo.doc.body.			//			//		Widgets should override this method to do any initialization			//		dependent on other widgets existing, and then call			//		this superclass method to finish things off.			//			//		startup() in subclasses shouldn't do anything			//		size related because the size of the widget hasn't been set yet.			if(this._started){ return; }			// Startup all children of this widget			dojo.forEach(this.getChildren(), function(child){ child.startup(); });			this.inherited(arguments);		}	});}
 |