]> git.wh0rd.org - tt-rss.git/blob - lib/dijit/_Container.js.uncompressed.js
make precache_headlines_idle() start slower
[tt-rss.git] / lib / dijit / _Container.js.uncompressed.js
1 define("dijit/_Container", [
2 "dojo/_base/array", // array.forEach array.indexOf
3 "dojo/_base/declare", // declare
4 "dojo/dom-construct", // domConstruct.place
5 "./registry" // registry.byNode()
6 ], function(array, declare, domConstruct, registry){
7
8 // module:
9 // dijit/_Container
10 // summary:
11 // Mixin for widgets that contain a set of widget children.
12
13 return declare("dijit._Container", null, {
14 // summary:
15 // Mixin for widgets that contain a set of widget children.
16 // description:
17 // Use this mixin for widgets that needs to know about and
18 // keep track of their widget children. Suitable for widgets like BorderContainer
19 // and TabContainer which contain (only) a set of child widgets.
20 //
21 // It's not suitable for widgets like ContentPane
22 // which contains mixed HTML (plain DOM nodes in addition to widgets),
23 // and where contained widgets are not necessarily directly below
24 // this.containerNode. In that case calls like addChild(node, position)
25 // wouldn't make sense.
26
27 buildRendering: function(){
28 this.inherited(arguments);
29 if(!this.containerNode){
30 // all widgets with descendants must set containerNode
31 this.containerNode = this.domNode;
32 }
33 },
34
35 addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
36 // summary:
37 // Makes the given widget a child of this widget.
38 // description:
39 // Inserts specified child widget's dom node as a child of this widget's
40 // container node, and possibly does other processing (such as layout).
41
42 var refNode = this.containerNode;
43 if(insertIndex && typeof insertIndex == "number"){
44 var children = this.getChildren();
45 if(children && children.length >= insertIndex){
46 refNode = children[insertIndex-1].domNode;
47 insertIndex = "after";
48 }
49 }
50 domConstruct.place(widget.domNode, refNode, insertIndex);
51
52 // If I've been started but the child widget hasn't been started,
53 // start it now. Make sure to do this after widget has been
54 // inserted into the DOM tree, so it can see that it's being controlled by me,
55 // so it doesn't try to size itself.
56 if(this._started && !widget._started){
57 widget.startup();
58 }
59 },
60
61 removeChild: function(/*Widget|int*/ widget){
62 // summary:
63 // Removes the passed widget instance from this widget but does
64 // not destroy it. You can also pass in an integer indicating
65 // the index within the container to remove
66
67 if(typeof widget == "number"){
68 widget = this.getChildren()[widget];
69 }
70
71 if(widget){
72 var node = widget.domNode;
73 if(node && node.parentNode){
74 node.parentNode.removeChild(node); // detach but don't destroy
75 }
76 }
77 },
78
79 hasChildren: function(){
80 // summary:
81 // Returns true if widget has children, i.e. if this.containerNode contains something.
82 return this.getChildren().length > 0; // Boolean
83 },
84
85 _getSiblingOfChild: function(/*dijit._Widget*/ child, /*int*/ dir){
86 // summary:
87 // Get the next or previous widget sibling of child
88 // dir:
89 // if 1, get the next sibling
90 // if -1, get the previous sibling
91 // tags:
92 // private
93 var node = child.domNode,
94 which = (dir>0 ? "nextSibling" : "previousSibling");
95 do{
96 node = node[which];
97 }while(node && (node.nodeType != 1 || !registry.byNode(node)));
98 return node && registry.byNode(node); // dijit._Widget
99 },
100
101 getIndexOfChild: function(/*dijit._Widget*/ child){
102 // summary:
103 // Gets the index of the child in this container or -1 if not found
104 return array.indexOf(this.getChildren(), child); // int
105 }
106 });
107 });