aboutsummaryrefslogtreecommitdiff
path: root/includes/js/dijit/tests/layout/test_LayoutCode.html
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dijit/tests/layout/test_LayoutCode.html')
-rw-r--r--includes/js/dijit/tests/layout/test_LayoutCode.html383
1 files changed, 383 insertions, 0 deletions
diff --git a/includes/js/dijit/tests/layout/test_LayoutCode.html b/includes/js/dijit/tests/layout/test_LayoutCode.html
new file mode 100644
index 0000000..9cec35e
--- /dev/null
+++ b/includes/js/dijit/tests/layout/test_LayoutCode.html
@@ -0,0 +1,383 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <title>Programmatic Layout Demo</title>
+
+ <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>
+
+ <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.html
+ dojo.require("dijit.form.ComboBox");
+ dojo.require("dijit.form.Button");
+
+ dojo.require("dojo.parser"); // scan page for widgets and instantiate them
+
+ // Simple layout container layout
+ var 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 layout
+ var 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 layout
+ var 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 layout
+ var 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 layout
+ var 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 node
+ var 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 widget
+ var 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 widget
+ rootWidget = createWidgetHierarchy(layout);
+
+ // and display it
+ var wrapper = dojo.byId("wrapper");
+ wrapper.innerHTML=""; // just to erase the initial HTML message
+ wrapper.appendChild(rootWidget.domNode);
+ // rootWidget.onResized();
+
+ // make/update the menu of operations on each widget
+ makeOperationTable();
+ }
+
+ // write out a menu of operations on each widget
+ function 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 it
+ function 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 shown
+ makeOperationTable();
+ }
+
+ // add a child to given widget
+ function addChild(widget){
+ widget = dijit.byId(widget);
+
+ // setup input node
+ var 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 widget
+ var 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 tab
+ layoutAlign: alignments[cnt%4], // necessary if parent is LayoutContainer
+ executeScripts: 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 parent
+ widget.addChild(child);
+
+ // reset the operation table so the new widget is shown
+ makeOperationTable();
+ }
+ var cnt=1;
+
+ // show a widget
+ function show(widget){
+ widget = dijit.byId(widget);
+ widget.show();
+ }
+
+ // hide a widget
+ function hide(widget){
+ widget = dijit.byId(widget);
+ widget.hide();
+ }
+ </script>
+</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>