SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

364 lines
9.8 KiB

<html>
<head>
<script type="text/javascript">
var djConfig = {isDebug: true};
</script>
<script type="text/javascript" src="../../dojo.js"></script>
<script type="text/javascript">
dojo.require("dojo.widget.LayoutContainer");
dojo.require("dojo.widget.SplitContainer");
dojo.require("dojo.widget.TabContainer");
dojo.require("dojo.widget.AccordionContainer");
dojo.require("dojo.widget.ContentPane");
// Simple layout container layout
var simpleLayout = {
widgetType: "LayoutContainer",
params: { widgetId: "rootWidget" },
style: "border: 3px solid grey; width: 95%; height: 400px;",
children: [
{
widgetType: "ContentPane",
params: {widgetId: "left", layoutAlign: "left"},
style: "width: 100px; background: #ffeeff;",
innerHTML: "this is the left"
},
{
widgetType: "ContentPane",
params: {widgetId: "right", layoutAlign: "right"},
style: "width: 100px; background: #ffeeff;",
innerHTML: "this is the right"
},
{
widgetType: "ContentPane",
params: {widgetId: "top", layoutAlign: "top"},
style: "height: 100px; background: #eeeeee;",
innerHTML: "this is the top"
},
{
widgetType: "ContentPane",
params: {widgetId: "bottom", layoutAlign: "bottom"},
style: "height: 100px; background: #eeeeee;",
innerHTML: "this is the bottom"
},
{
widgetType: "ContentPane",
params: {widgetId: "client", layoutAlign: "client"},
style: "height: 100px; background: #ffffee;",
innerHTML: "this is the client"
}
]
};
// split container layout
var splitLayout = {
widgetType: "SplitContainer",
params: {widgetId: "rootWidget", orientation: "horizontal"},
style: "border: 3px solid grey; width: 95%; height: 400px;",
children: [
{
widgetType: "ContentPane",
params: {widgetId: "left"},
style: "background: #ffeeff;",
innerHTML: "left pane of split container"
},
{
widgetType: "SplitContainer",
params: {
widgetId: "nested", orientation: "vertical"},
children: [
{
widgetType: "ContentPane",
params: {widgetId: "top"},
style: "background: #eeffee;",
innerHTML: "center-top pane of nested split container"
},
{
widgetType: "ContentPane",
params: {widgetId: "bottom"},
style: "background: #eeffee;",
innerHTML: "center-bottom pane of nested split container"
}
]
},
{
widgetType: "ContentPane",
params: {widgetId: "right"},
style: "background: #ffeeff;",
innerHTML: "right pane of split container"
}
]
};
// tab container layout
var tabLayout = {
widgetType: "TabContainer",
params: {widgetId: "rootWidget"},
style: "width: 95%; height: 400px;",
children: [
{
widgetType: "ContentPane",
params: {widgetId: "content", label: "Content tab", href: "doc0.html", executeScripts: true},
style: "background: #ffeeff;"
},
{
widgetType: "SplitContainer",
params: {widgetId: "nestedSplit", label: "Split pane tab", orientation: "vertical"},
children: [
{
widgetType: "ContentPane",
params: {widgetId: "top"},
style: "background: #eeffee;",
innerHTML: "top pane of nested split container"
},
{
widgetType: "ContentPane",
params: {widgetId: "bottom"},
style: "background: #eeffee;",
innerHTML: "bottom pane of nested split container"
}
]
},
{
widgetType: "TabContainer",
params: {widgetId: "nestedTab", label: "Nested tabs"},
children: [
{
widgetType: "ContentPane",
params: {widgetId: "left", label: "Nested Tab #1"},
style: "background: #eeffee;",
innerHTML: "tab 1 of nested tabs"
},
{
widgetType: "ContentPane",
params: {
widgetId: "right", label: "Nested Tab #2"},
style: "background: #eeffee;",
innerHTML: "tab 2 of nested tabs"
}
]
}
]
};
// tab container layout
var tabNoLayout = {
widgetType: "TabContainer",
params: {widgetId: "rootWidget", doLayout: false},
children: [
{
widgetType: "ContentPane",
params: {widgetId: "doc0", label: "Doc 0", href: "doc0.html", executeScripts: true},
style: "background: #ffeeff;"
},
{
widgetType: "ContentPane",
params: {widgetId: "doc1", label: "Doc 1", href: "doc1.html", executeScripts: true},
style: "background: #eeffee;"
},
{
widgetType: "ContentPane",
params: {widgetId: "doc2", label: "Doc 2", href: "doc2.html", executeScripts: true},
style: "background: #ffffee;"
}
]
};
// accordion container layout
var accordionLayout = {
widgetType: "AccordionContainer",
params: {widgetId: "rootWidget"},
style: "border: 3px solid grey; width: 95%; height: 400px;",
children: [
{
widgetType: "ContentPane",
params: {widgetId: "one", label: "Pane #1"},
style: "background: #ffeeff;",
innerHTML: "first pane contents"
},
{
widgetType: "ContentPane",
params: {widgetId: "two", label: "Pane #2"},
style: "background: #ffeeff;",
innerHTML: "second pane contents"
},
{
widgetType: "ContentPane",
params: {widgetId: "three", label: "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){
setCssText(node, widgetJson.style);
}
if(widgetJson.innerHTML){
node.innerHTML=widgetJson.innerHTML;
}
// create the widget
var widget = dojo.widget.createWidget(widgetJson.widgetType, widgetJson.params, node);
// add it's children (recursively)
if(widgetJson.children){
dojo.lang.forEach(widgetJson.children,
function(child){ widget.addChild(createWidgetHierarchy(child)); });
}
return widget;
}
// set the cssText of a node
function setCssText(node, cssText){
// make opera sing
if(dojo.lang.isUndefined(node.style.cssText)){
node.setAttribute("style", cssText);
}else{
node.style.cssText= cssText;
}
}
// create the widgets specified in layout and add them to widget "rootWidget"
function create(layout){
// erase old widget hierarchy (if it exists)
var rootWidget = dojo.widget.byId("rootWidget");
if(rootWidget){
rootWidget.destroy();
}
// 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>";
dojo.lang.forEach(dojo.widget.manager.getAllWidgets(), function(widget){
html += "<tr><td>" + widget.widgetId + "</td><td>";
html += "<button onclick='removeFromParent(\"" + widget.widgetId + "\");'> destroy </button> ";
if(/Container/.test(widget.widgetType)){
html += "<button onclick='addChild(\"" + widget.widgetId + "\");'> 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 = dojo.widget.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 = dojo.widget.byId(widget);
// setup input node
var node = document.createElement("div");
setCssText(node, "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 = dojo.widget.createWidget(
"ContentPane",
{
widgetId: "widget_" + cnt,
label: "Widget " + cnt, // necessary if parent is tab
layoutAlign: alignments[cnt%4], // necessary if parent is LayoutContainer
executeScripts: true,
href: hrefs[cnt%3]
},
node
);
cnt++;
// 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 = dojo.widget.byId(widget);
widget.show();
}
// hide a widget
function hide(widget){
widget = dojo.widget.byId(widget);
widget.hide();
}
</script>
<style>
html, body {
height: 100%;
width: 100%;
}
#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>