r9212: the beginnings of a registry editor in SWAT, using client side javascript...
authorAndrew Tridgell <tridge@samba.org>
Mon, 8 Aug 2005 03:23:20 +0000 (03:23 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:31:31 +0000 (13:31 -0500)
This doesn't work at all well yet, mostly because of my inexperience
with client side javascript and what events are available

swat/esptest/registry.esp [new file with mode: 0644]
swat/esptest/registry_calls.esp [new file with mode: 0644]
swat/menu.js

diff --git a/swat/esptest/registry.esp b/swat/esptest/registry.esp
new file mode 100644 (file)
index 0000000..85843c4
--- /dev/null
@@ -0,0 +1,120 @@
+<% 
+  page_header("columns", "ESP registry edit", "esptest"); 
+%>
+
+<script type="text/javascript" src="/scripting/client/encoder.js"></script>
+<script type="text/javascript" src="/scripting/client/call.js"></script>
+
+<h1>Registry Editor</h1>
+
+  <script type="text/javascript">
+
+function folder_list(t, list) {
+       var i;
+       t.populated = true;
+       t.reg_list = new Object();
+       for (i=0;i<list.length;i++) {
+               var te;
+               if (t.reg_list.working != undefined) {
+                       te = t.reg_list.working;
+                       t.reg_list = new Object();
+                       te.label = list[i];
+               } else {
+                       te = new QxTreeFolder(list[i]);
+                       t.add(te);
+               }
+               te.binding = t.binding;
+               if (t.reg_path == '\\\\') {
+                       te.reg_path = list[i];
+               } else {
+                       te.reg_path = t.reg_path + '\\\\' + list[i];
+               }
+               te.reg_list = new Object();
+               te.reg_list.working = new QxTreeFolder('Working ...');
+               te.add(te.reg_list.working);
+               t.reg_list[list[i]] = te;
+               te.addEventListener("click", function() { 
+                       var el = this; folder_click(el); 
+               });
+               te.setOverflow("auto");
+               t.setOpen(1);
+       }
+}
+
+function folder_click(t) {
+       if (!t.populated) {
+               server_call("registry_calls.esp", 'enum_path', 
+                           function(list) { folder_list(t, list); }, 
+                           t.binding, t.reg_path);
+       }
+}
+
+/* return a registry tree for the given server */
+function registry_tree(binding) {
+      var t = new QxTree("registry: " + binding);
+      t.binding = binding;
+      t.reg_path = "\\\\";
+      t.reg_list = new Object();
+      t.populated = false;
+      with(t)
+      {
+        setBackgroundColor(255);
+        setBorder(QxBorder.presets.inset);
+        setOverflow("auto");
+        setStyleProperty("padding", "2px");
+        setWidth(200);
+        setHeight("100%");
+        setTop(20);
+       addEventListener("click", function() { folder_click(t); });
+      }
+      return t;
+}
+
+  window.application.main = function()
+  {
+    var inlineWidget = new QxInline;
+    var fieldSet = new QxFieldSet("Registry");
+    var binding = "ncacn_np:win2003";
+
+    with(fieldSet)
+    {
+           setWidth("40%");
+           setMinHeight(500);
+           setBottom(48);
+           setMinWidth(500);
+    };
+
+    var gl = new QxGridLayout("auto,auto,auto,auto,auto", "100%");
+    gl.setEdge(0);
+    gl.setCellPaddingTop(3);
+    gl.setCellPaddingBottom(3);
+
+    inlineWidget.add(fieldSet);
+
+    var t = registry_tree(binding);
+
+    function change_binding(e) {
+           binding = e.getNewValue();
+           srv_printf("changed binding to %s\\n", binding);
+           gl.remove(t);
+           t = registry_tree(binding);
+           gl.add(t, { row : 2, col : 1 });
+    }
+
+    var b = new QxTextField(binding);
+    b.addEventListener("changeText", change_binding);
+
+    gl.add(b, { row : 1, col : 1 });
+    gl.add(t, { row : 2, col : 1 });
+
+    fieldSet.add(gl);
+    inlineWidget.add(fieldSet);
+    this.getClientWindow().getDocument().add(inlineWidget, "canvas");
+  };
+
+  </script>
+
+
+ <div id="canvas" style="overflow:hidden;position:static;margin-top:38px;margin-left:10px;margin-right:700px;width:700px"></div>
+
+<% page_footer(); %>
diff --git a/swat/esptest/registry_calls.esp b/swat/esptest/registry_calls.esp
new file mode 100644 (file)
index 0000000..a5c1ae7
--- /dev/null
@@ -0,0 +1,37 @@
+<%
+libinclude("base.js");
+libinclude("winreg.js");
+libinclude("server_call.js");
+
+/* 
+   server side call to return a listing of elements in a winreg path
+*/
+function enum_path(binding, path) {
+       printf("enum_path(%s, %s)\n", binding, path);
+       if (path == "\\") {
+               printf("IN ROOT\n");
+               var list = new Array("HKLM", "HKCR", "HKPD");
+               return list;
+       }
+       printf("binding=%s path=%s\n", binding, path);
+       var reg = winreg_init();
+       security_init(reg);
+
+       reg.credentials = session.authinfo.credentials;
+
+       var status = reg.connect(binding);
+       if (status.is_ok != true) {
+               printVars(status);
+               return undefined;
+       }
+       var list = winreg_enum_path(reg, path);
+       return list;
+}
+
+/* register a call for clients to make */
+var call = servCallObj();
+call.add('enum_path', enum_path);
+
+/* run the function that was asked for */
+call.run();
+%>
index 7e8281349f176e4cf46e815035cff67cdb0f23bc..83529825f12dc5644ccadd21d4b5a59ca30cf6f2 100644 (file)
@@ -32,7 +32,8 @@ swat_menus.esptest = simple_menu(
        "loadparm access",       session_uri("/esptest/loadparm.esp"),
        "exception handling",    session_uri("/esptest/exception.esp"),
        "environment variables", session_uri("/esptest/showvars.esp"),
-       "qooxdoo",               session_uri("/esptest/qooxdoo.esp"));
+       "qooxdoo",               session_uri("/esptest/qooxdoo.esp"),
+       "registry",              session_uri("/esptest/registry.esp"));
 
 
 swat_menus.install = simple_menu(