r9227: cleanup and simplify the AJAJ code
[kai/samba.git] / swat / scripting / forms.js
1 /*
2         js functions for forms
3 */
4
5
6 /*
7   display a simple form from a ejs Form object
8   caller should fill in
9     f.name          = form name
10     f.action        = action to be taken on submit (optional, defaults to current page)
11     f.class         = css class (optional, defaults to 'form')
12     f.submit        = an array of submit labels
13     f.element[i].label = element label
14     f.element[i].name  = element name (defaults to label)
15     f.element[i].type  = element type (defaults to text)
16     f.element[i].value = current value (optional, defaults to "")
17  */
18 function form_display() {
19         var f = this;
20         var i, size = 20;
21         write('<form name="' + f.name +
22               '" method="post" action="' + f.action + 
23               '" class="' + f.class + '">\n');
24         if (f.element.length > 0) {
25                 write("<table>\n");
26         }
27         for (i in f.element) {
28                 var e = f.element[i];
29                 if (e.name == undefined) {
30                         e.name = e.label;
31                 }
32                 if (e.value == undefined) {
33                         e.value = "";
34                 }
35                 if (strlen(e.value) > size) {
36                         size = strlen(e.value) + 4;
37                 }
38         }
39         for (i in f.element) {
40                 var e = f.element[i];
41                 write("<tr>");
42                 write("<td>" + e.label + "</td>");
43                 if (e.type == "select") {
44                         write('<td><select name="' + e.name + '">\n');
45                         for (s in e.list) {
46                                 if (e.value == e.list[s]) {
47                                         write('<option selected=selected>' + e.list[s] + '</option>\n');
48                                 } else {
49                                         write('<option>' + e.list[s] + '</option>\n');
50                                 }
51                         }
52                         write('</select></td>\n');
53                 } else {
54                         var sizestr = "";
55                         if (e.type == "text" || e.type == "password") {
56                                 sizestr = sprintf('size="%d"', size);
57                         }
58                         writef('<td><input name="%s" type="%s" value="%s" %s /></td>\n',
59                                e.name, e.type, e.value, sizestr);
60                 }
61                 write("</tr>");
62         }
63         if (f.element.length > 0) {
64                 write("</table>\n");
65         }
66         for (i in f.submit) {
67                 write('<input name="submit" type="submit" value="' + f.submit[i] + '" />\n');
68         }
69         write("</form>\n");
70 }
71
72
73 /*
74   create a Form object with the defaults filled in, ready for display()
75  */
76 function FormObj(name, num_elements, num_submits)
77 {
78         var f = new Object();
79         f.name = name;
80         f.element = new Array(num_elements);
81         f.submit =  new Array(num_submits);
82         f.action = session_uri(request.REQUEST_URI);
83         f.class = "defaultform";
84         for (i in f.element) {
85                 f.element[i] = new Object();
86                 f.element[i].type = "text";
87                 f.element[i].value = "";
88         }
89         f.display = form_display;
90
91         return f;
92 }
93