r25031: Use pointers to services rather than service numbers when possible.
[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.add(name, label, [type], [value])  =
14         Add another element
15     f.element[i].label = element label
16     f.element[i].name  = element name (defaults to label)
17     f.element[i].type  = element type (defaults to text)
18     f.element[i].value = current value (optional, defaults to "")
19  */
20 function form_display() {
21         var f = this;
22         var i, size = 20;
23         write('<form name="' + f.name +
24               '" method="post" action="' + f.action + 
25               '" class="' + f.class + '">\n');
26         if (f.element.length > 0) {
27                 write("<table>\n");
28         }
29         for (i in f.element) {
30                 var e = f.element[i];
31                 if (e.name == undefined) {
32                         e.name = e.label;
33                 }
34                 if (e.value == undefined) {
35                         e.value = "";
36                 }
37                 if (strlen(e.value) > size) {
38                         size = strlen(e.value) + 4;
39                 }
40         }
41         for (i in f.element) {
42                 var e = f.element[i];
43                 write("<tr>");
44                 write("<td>" + e.label + "</td>");
45                 if (e.type == "select") {
46                         write('<td><select name="' + e.name + '">\n');
47                         for (s in e.list) {
48                                 if (e.value == e.list[s]) {
49                                         write('<option selected=selected>' + e.list[s] + '</option>\n');
50                                 } else {
51                                         write('<option>' + e.list[s] + '</option>\n');
52                                 }
53                         }
54                         write('</select></td>\n');
55                 } else {
56                         var sizestr = "";
57                         if (e.type == "text" || e.type == "password") {
58                                 sizestr = sprintf('size="%d"', size);
59                         }
60                         writef('<td><input name="%s" type="%s" value="%s" %s /></td>\n',
61                                e.name, e.type, e.value, sizestr);
62                 }
63                 write("</tr>");
64         }
65         if (f.element.length > 0) {
66                 write("</table>\n");
67         }
68         for (i in f.submit) {
69                 write('<input name="submit" type="submit" value="' + f.submit[i] + '" />\n');
70         }
71         write("</form>\n");
72 }
73
74 function __addMethod(name, label)
75 {
76         var f = this;
77         var i = f.element.length;
78         f.element[i] = new Object();
79         f.element[i].name = name;
80         f.element[i].label = label;
81         f.element[i].type = "text";
82         f.element[i].value = "";
83         if (arguments.length > 2) {
84                 f.element[i].type = arguments[2];
85         }
86         if (arguments.length > 3) {
87                 f.element[i].value = arguments[3];
88         }
89 }
90
91 /*
92   create a Form object with the defaults filled in, ready for display()
93  */
94 function FormObj(name, num_elements, num_submits)
95 {
96         var f = new Object();
97         f.name = name;
98         f.element = new Array(num_elements);
99         f.submit =  new Array(num_submits);
100         f.action = session_uri(request.REQUEST_URI);
101         f.class = "defaultform";
102         f.add = __addMethod;
103         for (i in f.element) {
104                 f.element[i] = new Object();
105                 f.element[i].type = "text";
106                 f.element[i].value = "";
107         }
108         f.display = form_display;
109
110         return f;
111 }
112