Subversion Repositories Applications.papyrus

Compare Revisions

Ignore whitespace Rev 2149 → Rev 2150

/trunk/api/js/dojo1.0/dojox/layout/BorderContainer.js
New file
0,0 → 1,119
if(!dojo._hasResource["dojox.layout.BorderContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.layout.BorderContainer"] = true;
dojo.provide("dojox.layout.BorderContainer");
 
dojo.require("dijit.layout._LayoutWidget");
 
dojo.experimental("dojox.layout.BorderContainer");
 
dojo.declare(
"dojox.layout.BorderContainer",
// [dijit._Widget, dijit._Container, dijit._Contained],
dijit.layout._LayoutWidget,
{
// summary
// Provides layout in 5 regions, a center and borders along its 4 sides.
//
// details
// A BorderContainer is a box with a specified size (like style="width: 500px; height: 500px;"),
// that contains children widgets marked with "position" of "top", "bottom", "left", "right", "center".
// It takes it's children marked as top/bottom/left/right, and lays them out along the edges of the center box,
// with "top" and "bottom" extending the full width of the container.
//
// usage
// <style>
// html, body{ height: 100%; width: 100%; }
// </style>
// <div dojoType="BorderContainer" style="width: 100%; height: 100%">
// <div dojoType="ContentPane" position="top">header text</div>
// <div dojoType="ContentPane" position="right" style="width: 200px;">table of contents</div>
// <div dojoType="ContentPane" position="center">client area</div>
// </div>
top: {},
bottom: {},
left: {}, // inside?
right: {}, // outside?
center: {},
 
layout: function(){
this._layoutChildren(this.domNode, this._contentBox, this.getChildren());
},
 
addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){
dijit._Container.prototype.addChild.apply(this, arguments);
if(this._started){
this._layoutChildren(this.domNode, this._contentBox, this.getChildren());
}
},
 
removeChild: function(/*Widget*/ widget){
dijit._Container.prototype.removeChild.apply(this, arguments);
if(this._started){
this._layoutChildren(this.domNode, this._contentBox, this.getChildren());
}
},
 
_layoutChildren: function(/*DomNode*/ container, /*Object*/ dim, /*Object[]*/ children){
/**
* summary
* Layout a bunch of child dom nodes within a parent dom node
* container:
* parent node
* dim:
* {l, t, w, h} object specifying dimensions of container into which to place children
* children:
* an array like [ {domNode: foo, position: "bottom" }, {domNode: bar, position: "client"} ]
*/
 
//TODO: what is dim and why doesn't it look right?
// copy dim because we are going to modify it
// dim = dojo.mixin({}, dim);
 
this.domNode.style.position = "relative";
 
//FIXME: do this once? somewhere else?
dojo.addClass(container, "dijitBorderContainer");
dojo.forEach(children, function(child){
var style = child.domNode.style;
style.position = "absolute";
if(child.position){
this[child.position] = child.domNode;
}
}, this);
 
var topStyle = this.top.style;
var rightStyle = this.right.style;
var leftStyle = this.left.style;
var centerStyle = this.center.style;
var bottomStyle = this.bottom.style;
var rightCoords = dojo.coords(this.right);
var leftCoords = dojo.coords(this.left);
var centerCoords = dojo.coords(this.center);
var bottomCoords = dojo.coords(this.bottom);
var topCoords = dojo.coords(this.top);
rightStyle.top = leftStyle.top = centerStyle.top = topCoords.h + "px";
topStyle.top = topStyle.left = topStyle.right = "0px";
bottomStyle.left = bottomStyle.bottom = bottomStyle.right = "0px";
leftStyle.left = rightStyle.right = "0px";
centerStyle.left = leftCoords.w + "px";
centerStyle.right = rightCoords.w + "px";
rightStyle.bottom = leftStyle.bottom = centerStyle.bottom = bottomCoords.h + "px";
},
 
resize: function(args){
this.layout();
}
});
 
// This argument can be specified for the children of a BorderContainer.
// Since any widget can be specified as a LayoutContainer child, mix it
// into the base widget class. (This is a hack, but it's effective.)
dojo.extend(dijit._Widget, {
// position: String
// "top", "bottom", "left", "right", "center".
// See the BorderContainer description for details on this parameter.
position: 'none'
});
 
}