blob: 3c120538fe37793a80cd5ac681234bd37e138829 [file] [log] [blame]
/*
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.html.layout");
dojo.require("dojo.lang.common");
dojo.require("dojo.string.extras");
dojo.require("dojo.html.style");
dojo.require("dojo.html.layout");
dojo.widget.html.layout = function (container, children, layoutPriority) {
dojo.html.addClass(container, "dojoLayoutContainer");
children = dojo.lang.filter(children, function (child, idx) {
child.idx = idx;
return dojo.lang.inArray(["top", "bottom", "left", "right", "client", "flood"], child.layoutAlign);
});
if (layoutPriority && layoutPriority != "none") {
var rank = function (child) {
switch (child.layoutAlign) {
case "flood":
return 1;
case "left":
case "right":
return (layoutPriority == "left-right") ? 2 : 3;
case "top":
case "bottom":
return (layoutPriority == "left-right") ? 3 : 2;
default:
return 4;
}
};
children.sort(function (a, b) {
return (rank(a) - rank(b)) || (a.idx - b.idx);
});
}
var f = {top:dojo.html.getPixelValue(container, "padding-top", true), left:dojo.html.getPixelValue(container, "padding-left", true)};
dojo.lang.mixin(f, dojo.html.getContentBox(container));
dojo.lang.forEach(children, function (child) {
var elm = child.domNode;
var pos = child.layoutAlign;
with (elm.style) {
left = f.left + "px";
top = f.top + "px";
bottom = "auto";
right = "auto";
}
dojo.html.addClass(elm, "dojoAlign" + dojo.string.capitalize(pos));
if ((pos == "top") || (pos == "bottom")) {
dojo.html.setMarginBox(elm, {width:f.width});
var h = dojo.html.getMarginBox(elm).height;
f.height -= h;
if (pos == "top") {
f.top += h;
} else {
elm.style.top = f.top + f.height + "px";
}
if (child.onResized) {
child.onResized();
}
} else {
if (pos == "left" || pos == "right") {
var w = dojo.html.getMarginBox(elm).width;
if (child.resizeTo) {
child.resizeTo(w, f.height);
} else {
dojo.html.setMarginBox(elm, {width:w, height:f.height});
}
f.width -= w;
if (pos == "left") {
f.left += w;
} else {
elm.style.left = f.left + f.width + "px";
}
} else {
if (pos == "flood" || pos == "client") {
if (child.resizeTo) {
child.resizeTo(f.width, f.height);
} else {
dojo.html.setMarginBox(elm, {width:f.width, height:f.height});
}
}
}
}
});
};
dojo.html.insertCssText(".dojoLayoutContainer{ position: relative; display: block; overflow: hidden; }\n" + "body .dojoAlignTop, body .dojoAlignBottom, body .dojoAlignLeft, body .dojoAlignRight { position: absolute; overflow: hidden; }\n" + "body .dojoAlignClient { position: absolute }\n" + ".dojoAlignClient { overflow: auto; }\n");