r9806: Some more test data
[sfrench/samba-autobuild/.git] / swat / scripting / common.js
index d9e3b56bceb026e207820c6b0277765da1896824..299a67c7020b1da922eb75e55270500ee21644d0 100644 (file)
@@ -8,6 +8,40 @@ global.page = new Object();
 /* fill in some defaults */
 global.page.title = "Samba Web Administration Tool";
 
+libinclude("base.js");
+
+/* to cope with browsers that don't support cookies we append the sessionid
+   to the URI */
+global.SESSIONURI = "";
+if (request['COOKIE_SUPPORT'] != "True") {
+       global.SESSIONURI="?SwatSessionId=" + request['SESSION_ID'];
+}
+
+/*
+  possibly adjust a local URI to have the session id appended
+  used for browsers that don't support cookies
+*/
+function session_uri(uri) {
+       return uri + global.SESSIONURI;
+}
+
+/*
+  like printf, but to the web page
+*/
+function writef()
+{
+       write(vsprintf(arguments));
+}
+
+/*
+  like writef with a <br>
+*/
+function writefln()
+{
+       write(vsprintf(arguments));
+       write("<br/>\n");
+}
+
 
 /* if the browser was too dumb to set the HOST header, then
    set it now */
@@ -18,9 +52,10 @@ if (headers['HOST'] == undefined) {
 /*
   show the page header. page types include "plain" and "column" 
 */
-function page_header(pagetype, title) {
+function page_header(pagetype, title, menu) {
        global.page.pagetype = pagetype;
        global.page.title = title;
+       global.page.menu = menu;
        include("/scripting/header_" + pagetype + ".esp");
 }
 
@@ -32,18 +67,21 @@ function page_footer() {
        include("/scripting/footer_" + global.page.pagetype + ".esp");
 }
 
+
 /*
   check if a uri is one of the 'always allowed' pages, even when not logged in
   This allows the login page to use the same style sheets and images
 */
 function always_allowed(uri) {
-       var allowed = new Array("/images/favicon.ico", 
-                               "/images/linkpad.gif",
-                               "/images/logo.png",
-                               "/style/main.css",
-                               "/style/common.css");
+       var str = string_init();
+       var s = str.split('.', uri);
+       if (s.length < 2) {
+               return false;
+       }
+       var ext = s[s.length-1];
+       var allowed = new Array("ico", "gif", "png","css", "js");
        for (i in allowed) {
-               if (allowed[i] == uri) {
+               if (allowed[i] == ext) {
                        return true;
                }
        }
@@ -51,25 +89,37 @@ function always_allowed(uri) {
 }
 
 /*
-  display a simple menu. First argument is menu title, followed by
-  pairs of menu item name and link
+  display a table element
 */
-function simple_menu() {
-       write("<i>" + arguments[0] + "</i><br /><ul>\n");
-       for (i = 1; i < arguments.length; i = i + 2) {
-               write("<li><a href=\"" + arguments[i+1] + "\">" + arguments[i] + "</a></li>\n");
+function table_element(i, o) {
+       write("<tr><td>" + i + "</td><td>");
+       if (typeof(o[i]) == "object") {
+               var j, first;
+               first = true;
+               for (j in o[i]) {
+                       if (first == false) {
+                               write("<br />");
+                       }
+                       write(o[i][j]);
+                       first = false;
+               }
+       } else {
+               write(o[i]);
        }
-       write("</ul>\n");
+       write("</td></tr>\n");
 }
 
-
 /*
-  display a ejs object as a table
+  display a ejs object as a table. The header is optional
 */
 function simple_table(v) {
+       if (v.length == 0) {
+               return;
+       }
        write("<table class=\"data\">\n");
+       var r;
        for (r in v) {
-               write("<tr><td>" + r + "</td><td>" + v[r] + "</td></tr>\n");
+               table_element(r, v);
        }
        write("</table>\n");
 }
@@ -79,73 +129,17 @@ function simple_table(v) {
   attribute
 */
 function multi_table(array, header) {
+       var i, n;
        write("<table class=\"data\">\n");
-       for (i in array) {
-               var v = array[i];
-               write("<tr><th colspan=2>" + v[header] + "</th></tr>\n");
+       for (i=0;i<array.length;i++) {
+               var r, v = array[i];
+               write('<tr><th colspan="2">' + v[header] + "</th></tr>\n");
                for (r in v) {
                        if (r != header) {
-                               write("<tr><td align=left>" + r + 
-                                     "</td><td align=left>" + v[r] + "</td></tr>\n");
+                           table_element(r, v);
                        }
                }
        }
        write("</table>\n");
 }
 
-/*
-  create a Form object with the defaults filled in, ready for display_form()
- */
-function Form(name, num_elements, num_submits)
-{
-       var f = new Object();
-       f.name = name;
-       f.element = new Array(num_elements);
-       f.submit =  new Array(num_submits);
-       f.action = request.REQUEST_URI;
-       f.class = "form";
-       for (i in f.element) {
-               f.element[i] = new Object();
-               f.element[i].type = "text";
-               f.element[i].value = "";
-       }
-       return f;
-}
-
-/*
-  display a simple form from a ejs Form object
-  caller should fill in
-    f.name          = form name
-    f.action        = action to be taken on submit (optional, defaults to current page)
-    f.class         = css class (optional, defaults to 'form')
-    f.submit        = an array of submit labels
-    f.element[i].label = element label
-    f.element[i].name  = element name (defaults to label)
-    f.element[i].type  = element type
-    f.element[i].value = current value (optional, defaults to "")
- */
-function display_form(f) {
-       write('<form name="' + f.name +
-             '" method="post" action="' + f.action + 
-             '" class="' + f.class + '">\n');
-       write("<table>\n");
-       for (i in f.element) {
-               var e = f.element[i];
-               if (e.name == undefined) {
-                       e.name = e.label;
-               }
-               if (e.value == undefined) {
-                       e.value = '""';
-               }
-               write("<tr>");
-               write("<td>" + e.label + "</td>");
-               write('<td><input name="' + e.name + '" type="' + 
-                     e.type + '" value="' + e.value + '"></td>\n');
-       }
-       write("</table>\n");
-       for (i in f.submit) {
-               write('<input name="' + f.submit[i] + 
-                     '" type="submit" value="' + f.submit[i] + '">\n');
-       }
-       write("</form>\n");
-}