r19282: make the recent qooxdoo work that Derrell has done available via the
[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 libinclude("base.js");
12
13 /* to cope with browsers that don't support cookies we append the sessionid
14    to the URI */
15 global.SESSIONURI = "";
16 if (request['COOKIE_SUPPORT'] != "True") {
17         global.SESSIONURI="?SwatSessionId=" + request['SESSION_ID'];
18 }
19
20 /*
21   possibly adjust a local URI to have the session id appended
22   used for browsers that don't support cookies
23 */
24 function session_uri(uri) {
25         return uri + global.SESSIONURI;
26 }
27
28 /*
29   like printf, but to the web page
30 */
31 function writef()
32 {
33         write(vsprintf(arguments));
34 }
35
36 /*
37   like writef with a <br>
38 */
39 function writefln()
40 {
41         write(vsprintf(arguments));
42         write("<br/>\n");
43 }
44
45
46 /* if the browser was too dumb to set the HOST header, then
47    set it now */
48 if (headers['HOST'] == undefined) {
49         headers['HOST'] = server['SERVER_HOST'] + ":" + server['SERVER_PORT'];
50 }
51
52 /*
53   show the page header. page types include "plain" and "column" 
54 */
55 function page_header(pagetype, title, menu) {
56         global.page.pagetype = pagetype;
57         global.page.title = title;
58         global.page.menu = menu;
59         include("/scripting/header_" + pagetype + ".esp");
60 }
61
62 /*
63   show the page footer, getting the page type from page.pagetype
64   set in page_header()
65 */
66 function page_footer() {
67         include("/scripting/footer_" + global.page.pagetype + ".esp");
68 }
69
70
71 /*
72   check if a uri is one of the 'always allowed' pages, even when not logged in
73   This allows the login page to use the same style sheets and images
74 */
75 function always_allowed(uri) {
76         var str = string_init();
77
78         /* allow jsonrpc-based applications to do their own authentication */
79         var s = str.split('/', uri);
80         if (s[0] == "" && s[1] == 'apps') {
81                 return true;
82         }
83
84         var s = str.split('.', uri);
85         if (s.length < 2) {
86                 return false;
87         }
88
89         var ext = s[s.length-1];
90         var allowed = new Array("ico", "gif", "png","css", "js");
91         for (i in allowed) {
92                 if (allowed[i] == ext) {
93                         return true;
94                 }
95         }
96         return false;
97 }
98
99 /*
100   display a table element
101 */
102 function table_element(i, o) {
103         write("<tr><td>" + i + "</td><td>");
104         if (typeof(o[i]) == "object") {
105                 var j, first;
106                 first = true;
107                 for (j in o[i]) {
108                         if (first == false) {
109                                 write("<br />");
110                         }
111                         write(o[i][j]);
112                         first = false;
113                 }
114         } else {
115                 write(o[i]);
116         }
117         write("</td></tr>\n");
118 }
119
120 /*
121   display a ejs object as a table. The header is optional
122 */
123 function simple_table(v) {
124         if (v.length == 0) {
125                 return;
126         }
127         write("<table class=\"data\">\n");
128         var r;
129         for (r in v) {
130                 table_element(r, v);
131         }
132         write("</table>\n");
133 }
134
135 /*
136   display an array of objects, with the header for each element from the given 
137   attribute
138 */
139 function multi_table(array, header) {
140         var i, n;
141         write("<table class=\"data\">\n");
142         for (i=0;i<array.length;i++) {
143                 var r, v = array[i];
144                 write('<tr><th colspan="2">' + v[header] + "</th></tr>\n");
145                 for (r in v) {
146                         if (r != header) {
147                             table_element(r, v);
148                         }
149                 }
150         }
151         write("</table>\n");
152 }
153