Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
        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");