summaryrefslogtreecommitdiff
path: root/swat
diff options
context:
space:
mode:
authorDerrell Lipman <derrell@samba.org>2006-10-13 02:49:16 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:20:59 -0500
commit28b6ae90765bc83446f42fade34105e479eff2d5 (patch)
treecfaaf1848c68ee7dc45aec94f2f49b4c2d810ac7 /swat
parentd70fbdbefa321825998b5bf558c23733fb46425a (diff)
downloadsamba-28b6ae90765bc83446f42fade34105e479eff2d5.tar.gz
samba-28b6ae90765bc83446f42fade34105e479eff2d5.tar.bz2
samba-28b6ae90765bc83446f42fade34105e479eff2d5.zip
r19259: An ldb browser.
This has the layout complete so anyone interested can see what a qooxdoo application might look like. It doesn't yet issue any JSON-RPC calls to do anything useful (that's next), and it still has the appearance of a qooxdoo test rather than something unique to Samba. I'll adjust the appearance later. This layout is loosely (or not so loosely) based on 'gq'. A few things in this layout won't apply to an ldb browser, but they're there for the time being anyway until I decide exactly what to do with them. Derrell (This used to be commit 0780cbcdcc7672932b055966a9d0480d2cd705b4)
Diffstat (limited to 'swat')
-rw-r--r--swat/apps/samba/utils/ldbbrowse.html555
1 files changed, 555 insertions, 0 deletions
diff --git a/swat/apps/samba/utils/ldbbrowse.html b/swat/apps/samba/utils/ldbbrowse.html
new file mode 100644
index 0000000000..adfe78e754
--- /dev/null
+++ b/swat/apps/samba/utils/ldbbrowse.html
@@ -0,0 +1,555 @@
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>qooxdoo &raquo; Demo</title>
+ <link type="text/css" rel="stylesheet" href="../../resource/css/layout.css"/>
+ <!--[if IE]>
+ <link
+ type="text/css" rel="stylesheet" href="../../resource/css/layout_ie.css"/>
+ <![endif]-->
+ <script type="text/javascript" src="../../script/qx.js"></script>
+</head>
+<body>
+ <script type="text/javascript" src="../../script/layout.js"></script>
+
+
+ <div id="demoDescription">
+ <p>
+ A simple LDB browser.
+ </div>
+
+<script type="text/javascript">
+
+/*
+Root is as found by:
+ source/bin/ldbsearch -H /usr/local/samba/private/sam.ldb -b '' \
+ -s base defaultNamingContext
+*/
+
+function setAppearances()
+{
+ // Modify the default appearance of a ComboBox for use in Search tab:
+ // use most of the available width.
+ //
+ // If we had multiple uses, we'd create a new appearance. Since we don't,
+ // we can just modify this default appearance.
+ //
+ // See http://qooxdoo.org/documentation/user_manual/appearance for an
+ // explanation of what's going on here. The missing significant point in
+ // the discussion is that in the current qooxdoo appearance
+ // implementation, it's not possible to override a specific widget's
+ // appearance with explicit settings just for that widget (stupid!). I
+ // expect that to change in a future version.
+ var appMgr = qx.manager.object.AppearanceManager.getInstance();
+ var theme = appMgr.getAppearanceTheme();
+ var appearance = theme._appearances["combo-box"];
+ if (! appearance)
+ {
+ return;
+ }
+ var oldInitial = appearance.initial;
+ appearance.initial = function(vTheme)
+ {
+ var res = oldInitial ? oldInitial.apply(this, arguments) : {};
+ res.width = "96%";
+ return res;
+ }
+}
+
+function setupMenu(clientDocument)
+{
+ var c1 = new qx.client.Command();
+ c1.addEventListener("execute", function(e) {
+ this.debug("Execute: " + e.getData().getLabel());
+ });
+
+ // Create the File menu pulldown
+ var fileMenu_ = new qx.ui.menu.Menu();
+
+ // Create items for within File menu
+ var fileMenu_NewTab_ = new qx.ui.menu.Menu();
+ {
+ var fileMenu_NewTab_Search =
+ new qx.ui.menu.MenuButton("Search", null, c1);
+ var fileMenu_NewTab_Browse =
+ new qx.ui.menu.MenuButton("Browse", null, c1);
+ var fileMenu_NewTab_Schema =
+ new qx.ui.menu.MenuButton("Schema", null, c1);
+ fileMenu_NewTab_.add(fileMenu_NewTab_Search,
+ fileMenu_NewTab_Browse,
+ fileMenu_NewTab_Schema);
+ }
+ var fileMenu_NewTab =
+ new qx.ui.menu.MenuButton("New tab", null, null, fileMenu_NewTab_);
+
+ var fileMenu_Preferences =
+ new qx.ui.menu.MenuButton("Preferences", null, c1);
+ var fileMenu_CloseTab =
+ new qx.ui.menu.MenuButton("Close Tab", null, c1);
+ var fileMenu_ShowMessageLog =
+ new qx.ui.menu.MenuButton("Show Message Log", null, c1);
+ var fileMenu_Quit =
+ new qx.ui.menu.MenuButton("Quit", null, c1);
+
+ // Add the menu items to the menu
+ fileMenu_.add(fileMenu_NewTab,
+ fileMenu_Preferences,
+ fileMenu_CloseTab,
+ fileMenu_ShowMessageLog,
+ fileMenu_Quit);
+
+
+ // Create the Filter menu pulldown
+ var filterMenu_ = new qx.ui.menu.Menu();
+
+ // Create items for within Filter menu
+ var filterMenu_NewFilter =
+ new qx.ui.menu.MenuButton("New Filter", null, c1);
+ var filterMenu_EditFilters =
+ new qx.ui.menu.MenuButton("Edit Filters", null, c1);
+ var filterMenu_Separator =
+ new qx.ui.menu.MenuSeparator();
+
+ // Add the menu items to the menu
+ filterMenu_.add(filterMenu_NewFilter,
+ filterMenu_EditFilters,
+ filterMenu_Separator);
+
+
+ // Add the menu items to the document
+ clientDocument.add(fileMenu_,
+ fileMenu_NewTab_,
+ filterMenu_);
+
+
+ // Create and position the toolbar which will act as our menubar
+ var toolBar = new qx.ui.toolbar.ToolBar();
+ toolBar.set(
+ {
+ top: 28,
+ left: 20,
+ right: 300
+ });
+
+ // Create the toolbar menu items and associate them with the pulldowns
+ var fileMenuButton =
+ new qx.ui.toolbar.ToolBarMenuButton("File", fileMenu_);
+ var filterMenuButton =
+ new qx.ui.toolbar.ToolBarMenuButton("Filters", filterMenu_);
+
+ // Add the toolbar items to the toolbar
+ toolBar.add(fileMenuButton,
+ filterMenuButton);
+
+ // Add the toolbar to the document
+ clientDocument.add(toolBar);
+
+ // Give 'em what we built!
+ return toolBar;
+}
+
+function setupTabs(clientDocument)
+{
+ // Create and position the tabview
+ var tabView_ = new qx.ui.pageview.tabview.TabView;
+ tabView_.set(
+ {
+ top: 60,
+ left: 20,
+ right: 300,
+ bottom: 30
+ });
+
+ // Create each of the tabs
+ var tabView_Search =
+ new qx.ui.pageview.tabview.TabViewButton("Search");
+ var tabView_Browse =
+ new qx.ui.pageview.tabview.TabViewButton("Browse");
+ var tabView_Schema =
+ new qx.ui.pageview.tabview.TabViewButton("Schema");
+
+ // Specify the initially-selected tab
+ tabView_Search.setChecked(true);
+
+ // Add each of the tabs to the tabview
+ tabView_.getBar().add(tabView_Search,
+ tabView_Browse,
+ tabView_Schema);
+
+ // Create the pages to display when each tab is selected
+ var tabViewPage_Search =
+ new qx.ui.pageview.tabview.TabViewPage(tabView_Search);
+ var tabViewPage_Browse =
+ new qx.ui.pageview.tabview.TabViewPage(tabView_Browse);
+ var tabViewPage_Schema =
+ new qx.ui.pageview.tabview.TabViewPage(tabView_Schema);
+
+ // Build the search page
+ buildPageSearch(tabViewPage_Search);
+
+ // Build the browse page
+ buildPageBrowse(tabViewPage_Browse);
+
+ // Build the schema page
+ buildPageSchema(tabViewPage_Schema);
+
+ // Add the pages to the tabview
+ tabView_.getPane().add(tabViewPage_Search,
+ tabViewPage_Browse,
+ tabViewPage_Schema);
+
+ // Add the tabview to the document
+ clientDocument.add(tabView_);
+
+ // Give 'em what we built!
+ return tabView_;
+}
+
+function buildPageSearch(page)
+{
+ // Create a combo box for entry of the search expression
+ var search = new qx.ui.form.ComboBox();
+ search.getField().setWidth("100%");
+ search.setEditable(true);
+
+ // Add the combo box to the page
+ page.add(search);
+
+ // Create a simple table model
+ var tableModel = new qx.ui.table.SimpleTableModel();
+ tableModel.setColumns([ "Attribute", "Value" ]);
+
+ // Add some garbage data to it
+ var attributeNames =
+ [
+ [ "Nickname" ],
+ [ "Hostname" ],
+ [ "Port" ],
+ [ "Connection caching" ],
+ [ "TLS" ],
+ [ "Client-side caching" ],
+ [ "Connections so far" ],
+ [ "LDAP protocol version" ],
+ [ "Vendor Name" ],
+ [ "Vendor Version" ],
+ [ "Support LDAP Version" ],
+ [ "Supported SASL Mechanisms" ],
+ [ "Junk 1" ],
+ [ "Junk 2" ],
+ [ "Junk 3" ]
+ ];
+
+
+ var rowData = [];
+ for (var row = 0; row < attributeNames.length; row++)
+ {
+ rowData.push([ attributeNames[row], "" + (Math.random() * 10000) ]);
+ }
+ tableModel.setData(rowData);
+ tableModel.setColumnEditable(0, false);
+ tableModel.setColumnEditable(1, true);
+
+ // Create a table
+ var table = new qx.ui.table.Table(tableModel);
+ with (table) {
+ set({
+ top: 40,
+ left: 0,
+ right: 0,
+ bottom: 10,
+ statusBarVisible: false,
+ columnVisibilityButtonVisible: false
+ });
+ setColumnWidth(0, 200);
+ setColumnWidth(1, 440);
+ setMetaColumnCounts([1, -1]);
+ };
+
+ page.add(table);
+}
+
+function buildPageBrowse(page)
+{
+ // Create a vertical splitpane for tree (top) and table (bottom)
+ var splitpane = new qx.ui.splitpane.VerticalSplitPane("1*", "2*");
+ splitpane.setEdge(0);
+
+ // Create a tree row structure for the tree root
+ var trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Root");
+
+ // Create the tree and set its characteristics
+ var tree = new qx.ui.treefullcontrol.Tree(trs);
+ tree.set(
+ {
+ backgroundColor: 255,
+ border: qx.renderer.border.BorderPresets.getInstance().inset,
+ overflow: "auto",
+ height: null,
+ top: 10,
+ left: 0,
+ right: 0,
+ bottom: 10
+ });
+
+ // Add the tree to the page.
+ splitpane.addTop(tree);
+
+ // Create a simple table model
+ var tableModel = new qx.ui.table.SimpleTableModel();
+ tableModel.setColumns([ "Attribute", "Value" ]);
+
+ // Add some garbage data to it
+ var attributeNames =
+ [
+ [ "Nickname" ],
+ [ "Hostname" ],
+ [ "Port" ],
+ [ "Connection caching" ],
+ [ "TLS" ],
+ [ "Client-side caching" ],
+ [ "Connections so far" ],
+ [ "LDAP protocol version" ],
+ [ "Vendor Name" ],
+ [ "Vendor Version" ],
+ [ "Support LDAP Version" ],
+ [ "Supported SASL Mechanisms" ],
+ [ "Junk 1" ],
+ [ "Junk 2" ],
+ [ "Junk 3" ]
+ ];
+
+
+ var rowData = [];
+ for (var row = 0; row < attributeNames.length; row++)
+ {
+ rowData.push([ attributeNames[row], "" + (Math.random() * 10000) ]);
+ }
+ tableModel.setData(rowData);
+ tableModel.setColumnEditable(0, false);
+ tableModel.setColumnEditable(1, true);
+
+ // Create a table
+ var table = new qx.ui.table.Table(tableModel);
+ with (table) {
+ set({
+ top: 10,
+ left: 0,
+ right: 0,
+ bottom: 10,
+ statusBarVisible: false,
+ columnVisibilityButtonVisible: false
+ });
+ setColumnWidth(0, 200);
+ setColumnWidth(1, 440);
+ setMetaColumnCounts([1, -1]);
+ };
+
+ splitpane.addBottom(table);
+
+ // Add the first splitpane to the page
+ page.add(splitpane);
+}
+
+function buildPageSchema(page)
+{
+ // Create a vertical splitpane for tree (top) and remainder (bottom)
+ var splitpane1 = new qx.ui.splitpane.VerticalSplitPane("1*", "2*");
+ splitpane1.setEdge(0);
+
+ // Create a tree row structure for the tree root
+ var trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Root");
+
+ // Create the tree and set its characteristics
+ var tree = new qx.ui.treefullcontrol.Tree(trs);
+ tree.set(
+ {
+ backgroundColor: 255,
+ border: qx.renderer.border.BorderPresets.getInstance().inset,
+ overflow: "auto",
+ height: null,
+ top: 10,
+ left: 0,
+ right: 0,
+ bottom: 10
+ });
+
+ // Add the tree to the page.
+ splitpane1.addTop(tree);
+
+ // Create another vertical splitpane for table (top) and required/allowed
+ // attributes lists (bottom)
+ var splitpane2 = new qx.ui.splitpane.VerticalSplitPane("1*", "2*");
+ splitpane2.setEdge(0);
+
+ // Create a simple table model
+ var tableModel = new qx.ui.table.SimpleTableModel();
+ tableModel.setColumns([ "Attribute", "Value" ]);
+
+ // Add some garbage data to it
+ var attributeNames =
+ [
+ [ "Nickname" ],
+ [ "Hostname" ],
+ [ "Port" ],
+ [ "Connection caching" ],
+ [ "TLS" ],
+ [ "Client-side caching" ],
+ [ "Connections so far" ],
+ [ "LDAP protocol version" ],
+ [ "Vendor Name" ],
+ [ "Vendor Version" ],
+ [ "Support LDAP Version" ],
+ [ "Supported SASL Mechanisms" ],
+ [ "Junk 1" ],
+ [ "Junk 2" ],
+ [ "Junk 3" ]
+ ];
+
+
+ var rowData = [];
+ for (var row = 0; row < attributeNames.length; row++)
+ {
+ rowData.push([ attributeNames[row], "" + (Math.random() * 10000) ]);
+ }
+ tableModel.setData(rowData);
+ tableModel.setColumnEditable(0, false);
+ tableModel.setColumnEditable(1, true);
+
+ // Create a table
+ var table = new qx.ui.table.Table(tableModel);
+ with (table) {
+ set({
+ top: 10,
+ left: 0,
+ right: 0,
+ bottom: 10,
+ statusBarVisible: false,
+ columnVisibilityButtonVisible: false
+ });
+ setColumnWidth(0, 200);
+ setColumnWidth(1, 440);
+ setMetaColumnCounts([1, -1]);
+ };
+
+ splitpane2.addTop(table);
+
+ // Create a horizontal splitpane for required attributes (left) and
+ // allowed attributes (right)
+ var splitpane3 = new qx.ui.splitpane.HorizontalSplitPane("1*", "1*");
+ splitpane3.setEdge(0);
+
+ // Create a vertical box layout for a label and list
+ var layout = new qx.ui.layout.VerticalBoxLayout();
+ layout.setWidth("100%");
+ layout.setHeight("100%");
+
+ // Create a label for the list of required attributes
+ var label = new qx.ui.basic.Atom("Required Attributes");
+
+ // Add the label to the vertical box layout
+ layout.add(label);
+
+ // Create a list for required attributes
+ var requiredAttributes = new qx.ui.form.List();
+ requiredAttributes.setWidth("100%");
+
+ requiredAttributes.set(
+ {
+ top: 0,
+ left: 0,
+ width: "98%",
+ height: "90%",
+ overflow : "scrollY"
+ });
+
+ var item;
+ for( var i=1; i<=35; i++ )
+ {
+ item = new qx.ui.form.ListItem("Item No " + i);
+ !(i % 9) && (item.setEnabled(false));
+ requiredAttributes.add(item);
+ };
+
+ // Add the required attributes to the layout
+ layout.add(requiredAttributes);
+
+ // Add the vertical box layout to the left of the third splitpane
+ splitpane3.addLeft(layout);
+
+ // Create a vertical box layout for a label and list
+ layout = new qx.ui.layout.VerticalBoxLayout();
+ layout.set(
+ {
+ width: "100%",
+ height: "100%"
+ });
+
+ // Create a label for the list of allowed attributes
+ var label = new qx.ui.basic.Atom("Allowed Attributes");
+ label.setLeft(10);
+
+ // Add the label to the vertical box layout
+ layout.add(label);
+
+ // Create a list for allowed attributes
+ var allowedAttributes = new qx.ui.form.List();
+ allowedAttributes.setWidth("100%");
+
+ allowedAttributes.set(
+ {
+ top: 0,
+ left: 10,
+ width: "98%",
+ height: "90%",
+ overflow : "scrollY"
+ });
+
+ var item;
+ for( var i=1; i<=35; i++ )
+ {
+ item = new qx.ui.form.ListItem("Item No " + i);
+ !(i % 9) && (item.setEnabled(false));
+ allowedAttributes.add(item);
+ };
+
+ // Add the allowed attributes to the layout
+ layout.add(allowedAttributes);
+
+ // Add the vertical box layout to the left of the third splitpane
+ splitpane3.addRight(layout);
+
+ // Add the third splitpane to the bottom of the second splitpane
+ splitpane2.addBottom(splitpane3);
+
+ // Add the second splitpane to the bottom of the first splitpane
+ splitpane1.addBottom(splitpane2);
+
+ // Add the first splitpane to the page
+ page.add(splitpane1);
+}
+
+qx.core.Init.getInstance().defineMain(
+ function()
+ {
+ // Set appearances for this application
+ setAppearances();
+
+ // Get the client document
+ var clientDocument = qx.ui.core.ClientDocument.getInstance();
+
+ // Create the toolbar and attach it to the client document
+ var toolBar = setupMenu(clientDocument);
+
+ // Create the tabs and their windows, and attach to client document
+ var tabView = setupTabs(clientDocument);
+ });
+/*
+ * Local Variables:
+ * mode: c
+ * End:
+ */
+</script>
+
+</body>
+</html>
+