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