Blame | Last modification | View Log | RSS feed
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"><html><head><title>Layout Demo</title><script type="text/javascript" src="../../../dojo/dojo.js"djConfig="isDebug: true, parseOnLoad: true"></script><script type="text/javascript" src="../_testCommon.js"></script><script type="text/javascript">dojo.require("dijit.layout.LayoutContainer");dojo.require("dijit.layout.AccordionContainer");dojo.require("dijit.layout.ContentPane");dojo.require("dijit.layout.SplitContainer");dojo.require("dijit.layout.TabContainer");// Used in doc0.htmldojo.require("dijit.form.ComboBox");dojo.require("dijit.form.Button");dojo.require("dojo.parser"); // scan page for widgets and instantiate them// Simple layout container layoutvar simpleLayout = {widgetType: "LayoutContainer",params: { id: "rootWidget" },style: "border: 3px solid grey; width: 95%; height: 400px;",children: [{widgetType: "ContentPane",params: {id: "left", layoutAlign: "left"},style: "width: 100px; background: #ffeeff;",innerHTML: "this is the left"},{widgetType: "ContentPane",params: {id: "right", layoutAlign: "right"},style: "width: 100px; background: #ffeeff;",innerHTML: "this is the right"},{widgetType: "ContentPane",params: {id: "top", layoutAlign: "top"},style: "height: 100px; background: #eeeeee;",innerHTML: "this is the top"},{widgetType: "ContentPane",params: {id: "bottom", layoutAlign: "bottom"},style: "height: 100px; background: #eeeeee;",innerHTML: "this is the bottom"},{widgetType: "ContentPane",params: {id: "client", layoutAlign: "client"},style: "height: 100px; background: #ffffee;",innerHTML: "this is the client"}]};// split container layoutvar splitLayout = {widgetType: "SplitContainer",params: {id: "rootWidget", orientation: "horizontal"},style: "border: 3px solid grey; width: 95%; height: 400px;",children: [{widgetType: "ContentPane",params: {id: "left"},style: "background: #ffeeff;",innerHTML: "left pane of split container"},{widgetType: "SplitContainer",params: {id: "nested", orientation: "vertical"},children: [{widgetType: "ContentPane",params: {id: "top"},style: "background: #eeffee;",innerHTML: "center-top pane of nested split container"},{widgetType: "ContentPane",params: {id: "bottom"},style: "background: #eeffee;",innerHTML: "center-bottom pane of nested split container"}]},{widgetType: "ContentPane",params: {id: "right"},style: "background: #ffeeff;",innerHTML: "right pane of split container"}]};// tab container layoutvar tabLayout = {widgetType: "TabContainer",params: {id: "rootWidget"},style: "width: 95%; height: 400px;",children: [{widgetType: "ContentPane",params: {id: "content", title: "Content tab", href: "doc0.html", executeScripts: true},style: "background: #ffeeff;"},{widgetType: "SplitContainer",params: {id: "nestedSplit", title: "Split pane tab", orientation: "vertical"},children: [{widgetType: "ContentPane",params: {id: "top"},style: "background: #eeffee;",innerHTML: "top pane of nested split container"},{widgetType: "ContentPane",params: {id: "bottom"},style: "background: #eeffee;",innerHTML: "bottom pane of nested split container"}]},{widgetType: "TabContainer",params: {id: "nestedTab", title: "Nested tabs"},children: [{widgetType: "ContentPane",params: {id: "left", title: "Nested Tab #1"},style: "background: #eeffee;",innerHTML: "tab 1 of nested tabs"},{widgetType: "ContentPane",params: {id: "right", title: "Nested Tab #2"},style: "background: #eeffee;",innerHTML: "tab 2 of nested tabs"}]}]};/*// tab container layoutvar tabNoLayout = {widgetType: "TabContainer",params: {id: "rootWidget", doLayout: false},children: [{widgetType: "ContentPane",params: {id: "doc0", title: "Doc 0", href: "doc0.html", executeScripts: true},style: "background: #ffeeff;"},{widgetType: "ContentPane",params: {id: "doc1", title: "Doc 1", href: "doc1.html", executeScripts: true},style: "background: #eeffee;"},{widgetType: "ContentPane",params: {id: "doc2", title: "Doc 2", href: "doc2.html", executeScripts: true},style: "background: #ffffee;"}]};*/// accordion container layoutvar accordionLayout = {widgetType: "AccordionContainer",params: {id: "rootWidget"},style: "border: 3px solid grey; width: 95%; height: 400px;",children: [{widgetType: "AccordionPane",params: {id: "one", title: "Pane #1"},style: "background: #ffeeff;",innerHTML: "first pane contents"},{widgetType: "AccordionPane",params: {id: "two", title: "Pane #2"},style: "background: #ffeeff;",innerHTML: "second pane contents"},{widgetType: "AccordionPane",params: {id: "three", title: "Pane #3"},style: "background: #ffeeff;",innerHTML: "third pane contents"}]};// Create a widget hierarchy from a JSON structure like// {widgetType: "LayoutContainer", params: { ... }, children: { ... } }function createWidgetHierarchy(widgetJson){// setup input nodevar node = document.createElement("div");document.body.appendChild(node); // necessary for tab contianer ???if(widgetJson.style){node.style.cssText = widgetJson.style;}if(widgetJson.innerHTML){node.innerHTML=widgetJson.innerHTML;}// create the widgetvar widget = new dijit.layout[widgetJson.widgetType](widgetJson.params, node);// add its children (recursively)if(widgetJson.children){dojo.forEach(widgetJson.children,function(child){ widget.addChild(createWidgetHierarchy(child)); });}widget.startup(); //TODO: this is required now, right?return widget;}// create the widgets specified in layout and add them to widget "rootWidget"function create(layout){// erase old widget hierarchy (if it exists)var rootWidget = dijit.byId("rootWidget");if(rootWidget){rootWidget.destroyRecursive();}// create new widgetrootWidget = createWidgetHierarchy(layout);// and display itvar wrapper = dojo.byId("wrapper");wrapper.innerHTML=""; // just to erase the initial HTML messagewrapper.appendChild(rootWidget.domNode);// rootWidget.onResized();// make/update the menu of operations on each widgetmakeOperationTable();}// write out a menu of operations on each widgetfunction makeOperationTable(){var html = "<table border=1>";dijit.registry.forEach(function(widget){html += "<tr><td>" + widget.id + "</td><td>";html += "<button onclick='removeFromParent(\"" + widget.id + "\");'> destroy </button> ";if(/Container/.test(widget.declaredClass)){html += "<button onclick='addChild(\"" + widget.id + "\");'> add a child </button> ";}html += "</td></tr>";});html += "</table>";dojo.byId("operations").innerHTML = html;}// remove a widget from it's parent and destroy itfunction removeFromParent(widget){widget = dijit.byId(widget);if(widget.parent){widget.parent.removeChild(widget);}widget.destroy();// reset the operation table so this widget is no longer shownmakeOperationTable();}// add a child to given widgetfunction addChild(widget){widget = dijit.byId(widget);// setup input nodevar node = document.createElement("div");node.style.cssText = "height: 70px; width: 150px; overflow: auto; background: #cccccc; border: dotted black 2px;"; // necessary if parent is LayoutContainer// create the widgetvar alignments = ["top","bottom","left","right"];var hrefs = ["doc0.html", "doc1.html", "doc2.html"];var child = new dijit.layout.ContentPane({title: "Widget " + cnt, // necessary if parent is tablayoutAlign: alignments[cnt%4], // necessary if parent is LayoutContainerexecuteScripts: true,href: hrefs[cnt%3]},node);cnt++;if(/AccordionContainer/.test(widget.declaredClass)){var pane = new dijit.layout.AccordionPane({title: "AccordionWidget " + cnt});pane.setContent(child);child = pane;}// add it to the parentwidget.addChild(child);// reset the operation table so the new widget is shownmakeOperationTable();}var cnt=1;// show a widgetfunction show(widget){widget = dijit.byId(widget);widget.show();}// hide a widgetfunction hide(widget){widget = dijit.byId(widget);widget.hide();}</script><style type="text/css">@import "../../../dojo/resources/dojo.css";@import "css/dijitTests.css";html, body{width: 100%; /* make the body expand to fill the visible window */height: 100%;overflow: hidden; /* erase window level scrollbars */padding: 0 0 0 0;margin: 0 0 0 0;}.dijitSplitPane{margin: 5px;}#rightPane {margin: 0;}#creator, #current {border: 3px solid blue;padding: 10px;margin: 10px;}#wrapper {border: 3px solid green;padding: 10px;margin: 10px;}</style></head><body><h1>Test of layout code programmatic creation</h1><table width="100%"><tr><td id="creator" valign="top"><h4>Creator</h4><p>Pressing a button will programatically add a hierarchy of widgets</p><button onClick="create(simpleLayout);">Simple Layout</button><button onClick="create(splitLayout);">Split Layout</button><button onClick="create(tabLayout);">Tab Layout</button><!-- <button onClick="create(tabNoLayout);">Tab Non-Layout</button> --><button onClick="create(accordionLayout);">Accordion Layout</button></td><td id="current"><h4>Current widgets</h4>This pane will let you try certain operations on each of the widgets.<div id="operations" style="height: 200px; overflow: auto;"></div></td></tr></table><hr><div id="wrapper">When you press a button, this will be filled in with the generated widgets</div></body></html>