r7096: added support for select lists in forms
[kai/samba.git] / swat / scripting / common.js
1 /*
2         js functions and code common to all pages
3 */
4
5 /* define some global variables for this request */
6 global.page = new Object();
7
8 /* fill in some defaults */
9 global.page.title = "Samba Web Administration Tool";
10
11
12 /* if the browser was too dumb to set the HOST header, then
13    set it now */
14 if (headers['HOST'] == undefined) {
15         headers['HOST'] = server['SERVER_HOST'] + ":" + server['SERVER_PORT'];
16 }
17
18 /*
19   show the page header. page types include "plain" and "column" 
20 */
21 function page_header(pagetype, title) {
22         global.page.pagetype = pagetype;
23         global.page.title = title;
24         include("/scripting/header_" + pagetype + ".esp");
25 }
26
27 /*
28   show the page footer, getting the page type from page.pagetype
29   set in page_header()
30 */
31 function page_footer() {
32         include("/scripting/footer_" + global.page.pagetype + ".esp");
33 }
34
35 /*
36   check if a uri is one of the 'always allowed' pages, even when not logged in
37   This allows the login page to use the same style sheets and images
38 */
39 function always_allowed(uri) {
40         var allowed = new Array("/images/favicon.ico", 
41                                 "/images/linkpad.gif",
42                                 "/images/logo.png",
43                                 "/style/main.css",
44                                 "/style/common.css");
45         for (i in allowed) {
46                 if (allowed[i] == uri) {
47                         return true;
48                 }
49         }
50         return false;
51 }
52
53 /*
54   display a simple menu. First argument is menu title, followed by
55   pairs of menu item name and link
56 */
57 function simple_menu() {
58         write("<i>" + arguments[0] + "</i><br /><ul>\n");
59         for (i = 1; i < arguments.length; i = i + 2) {
60                 write("<li><a href=\"" + arguments[i+1] + "\">" + arguments[i] + "</a></li>\n");
61         }
62         write("</ul>\n");
63 }
64
65
66 /*
67   display a ejs object as a table
68 */
69 function simple_table(v) {
70         write("<table class=\"data\">\n");
71         for (r in v) {
72                 write("<tr><td>" + r + "</td><td>" + v[r] + "</td></tr>\n");
73         }
74         write("</table>\n");
75 }
76
77 /*
78   display an array of objects, with the header for each element from the given 
79   attribute
80 */
81 function multi_table(array, header) {
82         write("<table class=\"data\">\n");
83         for (i in array) {
84                 var v = array[i];
85                 write("<tr><th colspan=2>" + v[header] + "</th></tr>\n");
86                 for (r in v) {
87                         if (r != header) {
88                                 write("<tr><td align=left>" + r + 
89                                       "</td><td align=left>" + v[r] + "</td></tr>\n");
90                         }
91                 }
92         }
93         write("</table>\n");
94 }
95
96 /*
97   create a Form object with the defaults filled in, ready for display_form()
98  */
99 function Form(name, num_elements, num_submits)
100 {
101         var f = new Object();
102         f.name = name;
103         f.element = new Array(num_elements);
104         f.submit =  new Array(num_submits);
105         f.action = request.REQUEST_URI;
106         f.class = "form";
107         for (i in f.element) {
108                 f.element[i] = new Object();
109                 f.element[i].type = "text";
110                 f.element[i].value = "";
111         }
112         return f;
113 }
114
115 /*
116   display a simple form from a ejs Form object
117   caller should fill in
118     f.name          = form name
119     f.action        = action to be taken on submit (optional, defaults to current page)
120     f.class         = css class (optional, defaults to 'form')
121     f.submit        = an array of submit labels
122     f.element[i].label = element label
123     f.element[i].name  = element name (defaults to label)
124     f.element[i].type  = element type (defaults to text)
125     f.element[i].value = current value (optional, defaults to "")
126  */
127 function display_form(f) {
128         write('<form name="' + f.name +
129               '" method="post" action="' + f.action + 
130               '" class="' + f.class + '">\n');
131         write("<table>\n");
132         for (i in f.element) {
133                 var e = f.element[i];
134                 if (e.name == undefined) {
135                         e.name = e.label;
136                 }
137                 if (e.value == undefined) {
138                         e.value = '""';
139                 }
140                 write("<tr>");
141                 write("<td>" + e.label + "</td>");
142                 if (e.type == "select") {
143                         write('<td><select name="' + e.name + '">\n');
144                         for (s in e.list) {
145                                 if (e.value == e.list[s]) {
146                                         write('<option selected=selected>' + e.list[s] + '</option>\n');
147                                 } else {
148                                         write('<option>' + e.list[s] + '</option>\n');
149                                 }
150                         }
151                         write('</select></td>\n');
152                 } else {
153                         write('<td><input name="' + e.name + '" type="' + 
154                               e.type + '" value="' + e.value + '"></td>\n');
155                 }
156         }
157         write("</table>\n");
158         for (i in f.submit) {
159                 write('<input name="submit" type="submit" value="' + f.submit[i] + '">\n');
160         }
161         write("</form>\n");
162 }