Commit c0e3a41035b5feeaf9909333483e4c236ce0ec34

Authored by Cédric RICARD
1 parent 49b8cd88

State name is now provided to the 'compute_page' function.

Improving Dojo API
calexium_lib/web/CXM_dojo.anubis
@@ -6,20 +6,21 @@ @@ -6,20 +6,21 @@
6 * 6 *
7 */ 7 */
8 8
9 -read calexium_lib/web/CXM_making_a_web_site.anubis 9 +read tools/basis.anubis
10 read tools/base64.anubis 10 read tools/base64.anubis
11 -read tools/basis.anubis // required for 'make_directory'  
12 read locale/L3LanguageInfo.anubis 11 read locale/L3LanguageInfo.anubis
  12 +read system/string.anubis
13 13
14 -read mailfountain_constants.anubis  
15 -read mailfountain_types.anubis  
16 read calexium_lib/web/CXM_common.anubis 14 read calexium_lib/web/CXM_common.anubis
17 read calexium_lib/web/CXM_making_a_web_site.anubis 15 read calexium_lib/web/CXM_making_a_web_site.anubis
18 read calexium_lib/web/CXM_multihost_http_server.anubis 16 read calexium_lib/web/CXM_multihost_http_server.anubis
  17 +read calexium_lib/net_services_protocols/logger_service.anubis
  18 +
  19 +read mailfountain_constants.anubis
  20 +read mailfountain_types.anubis
19 read common/language_management.anubis 21 read common/language_management.anubis
20 22
21 read tools/mf_loggers.anubis 23 read tools/mf_loggers.anubis
22 -read calexium_lib/net_services_protocols/logger_service.anubis  
23 read system/logger.anubis 24 read system/logger.anubis
24 25
25 public type Dojo_Grid_Data : 26 public type Dojo_Grid_Data :
@@ -72,26 +73,132 @@ public define HTML_Off_Form @@ -72,26 +73,132 @@ public define HTML_Off_Form
72 // </div><br />") 73 // </div><br />")
73 ] 74 ]
74 . 75 .
  76 +public type DojoGridEditor:
  77 + inputEditor,
  78 + boolEditor,
  79 + selectEditor(List(String) options),
  80 + alwaysOnEditor.
  81 +
  82 +public type DojoGridDefaultColumn:
  83 + dojo_grid_default_column(
  84 + String styles,
  85 + Maybe(String) width,
  86 + Maybe(DojoGridEditor) editor).
  87 +
  88 +public type DojoGridColumn:
  89 + dojo_grid_column( String label,
  90 + String field_name,
  91 + Maybe(String) width,
  92 + Maybe(DojoGridEditor) editor).
  93 +
  94 +public type DojoGridView:
  95 + dojo_grid_view(
  96 + Maybe(DojoGridDefaultColumn) default_column,
  97 + List(DojoGridColumn) columns).
  98 +
  99 +public type DojoGridLayout:
  100 + dojo_grid_layout(
  101 + Maybe(String) selectable_row_header_width,
  102 + List(DojoGridView) views).
  103 +
  104 +define String to_String(DojoGridEditor editor) =
  105 + "editor: " +
  106 + if editor is
  107 + {
  108 + inputEditor then "dojox.grid.editors.Input",
  109 + boolEditor then "dojox.grid.editors.Bool",
  110 + selectEditor(options) then "dojox.grid.editors.Select, options: [" + join(",", map((String o) |-> "\"" + o + "\"", options)) + "]",
  111 + alwaysOnEditor then "dojox.grid.editors.AlwaysOn"
  112 + }.
  113 +
  114 +define String to_String(DojoGridView view) =
  115 + "{ " + (if view.default_column is success(col) then
  116 + (if col is dojo_grid_default_column(styles, mb_width, mb_editor) then
  117 + "defaultCell: {"
  118 + + "styles: \"" + styles + "\""
  119 + + (if mb_width is success(w) then ", width=\"" + w + "\"" else "")
  120 + + (if mb_editor is success(e) then ", " + to_String(e) else "")
  121 + + "}, ")
  122 + else "")
  123 + + "cells: [[" + join(",", map((DojoGridColumn col) |->
  124 + if col is dojo_grid_column(label, field, mb_width, mb_editor) then
  125 + "{"
  126 + + "name: \"" + label + "\""
  127 + + "field: \"" + field + "\""
  128 + + (if mb_width is success(w) then ", width=\"" + w + "\"" else "")
  129 + + (if mb_editor is success(e) then ", " + to_String(e) else "")
  130 + + "}",
  131 + view.columns)) + "]]"
  132 + +"}".
  133 +
  134 +
  135 +public define String
  136 + dojo_make_grid_script
  137 + (
  138 + HtmlId html_id,
  139 + DojoGridLayout layout,
  140 + String layout_name,
  141 + String store_name,
  142 + Bool can_edit
  143 + )
  144 + =
  145 +"<script type=\"text/javascript\">
  146 + " + layout_name + " = ["
  147 + + (if layout.selectable_row_header_width is success(w) then "{ type: 'dojox.GridRowView', width: '" + w + "'}, " else "")
  148 + + join(", ", map(to_String, layout.views))
  149 + + "];
  150 +</script>".
  151 +
  152 +public define HTML_Off_Form
  153 + dojo_make_grid_script
  154 + (
  155 + HtmlId html_id,
  156 + List(String) columns,
  157 + Bool can_edit
  158 + )
  159 + =
  160 + literal(
  161 +"<script type=\"text/javascript\">
  162 + var cols = ["+join(",", map((String col) |-> "\"" + col + "\"", columns)) + "];
  163 + dojo.addOnLoad(function(){
  164 + init_dojo_grid(\""+html_id.id+"\", cols, "+ (if can_edit then "1" else "0")+");
  165 + });
  166 +</script>").
75 167
76 public define HTML_Off_Form 168 public define HTML_Off_Form
77 dojo_grid 169 dojo_grid
78 ( 170 (
79 - String id, 171 + HtmlId html_id,
  172 + List(CoreAttrs) attributes,
  173 + )
  174 + =
  175 + div_empty([id(html_id.id), attr("dojoType", "dojox.Grid") . attributes ]).
  176 +
  177 +
  178 +public define HTML_Off_Form
  179 + dojo_grid
  180 + (
  181 + HtmlId html_id,
  182 + List(CoreAttrs) attributes,
  183 +// List(GridColumn) columns,
80 String colum1, 184 String colum1,
81 String colum2, 185 String colum2,
82 String colum3, 186 String colum3,
83 String colum4, 187 String colum4,
84 - Bool can_edit 188 + Bool can_edit
85 ) 189 )
86 = 190 =
87 - literal("<script type=\"text/javascript\">  
88 - dojo.addOnLoad(function(){  
89 - init_dojo_grid(\""+colum1+"\",\""+colum2+"\", \""+colum3+"\", \""+colum4+"\", "+ (if can_edit then "1" else "0")+");  
90 - }  
91 - );  
92 - </script>  
93 -<div id=\"gridContainer\"></div>")  
94 -. 191 + sequence([
  192 + literal(
  193 +
  194 +"<script type=\"text/javascript\">
  195 + dojo.addOnLoad(function(){
  196 + init_dojo_grid(\""+html_id.id+"\", \""+colum1+"\",\""+colum2+"\", \""+colum3+"\", \""+colum4+"\", "+ (if can_edit then "1" else "0")+");
  197 + });
  198 +</script>"),
  199 + div_empty([id(html_id.id) . attributes /*attr("dojoType", "dojox.Grid"), */]),
  200 + ]).
  201 +//<div id=\"gridContainer\"></div>").
95 202
96 203
97 public define HTML_Off_Form 204 public define HTML_Off_Form
@@ -123,83 +230,118 @@ public define HTML_Off_Form @@ -123,83 +230,118 @@ public define HTML_Off_Form
123 //actioner(same, same, push_button([id("dojo_tip_" + keyword), class("in"), event(onclick,"new_search(this)")], keyword), "", [], []). 230 //actioner(same, same, push_button([id("dojo_tip_" + keyword), class("in"), event(onclick,"new_search(this)")], keyword), "", [], []).
124 231
125 232
  233 +public type BorderContainerRegion:
  234 + center,
  235 + top,
  236 + bottom,
  237 + leading,
  238 + trailing,
  239 + left,
  240 + right.
  241 +
  242 +define String
  243 + to_String
  244 + (
  245 + BorderContainerRegion region
  246 + )=
  247 + if region is
  248 + {
  249 + center then "center",
  250 + top then "top",
  251 + bottom then "bottom",
  252 + leading then "leading",
  253 + trailing then "trailing",
  254 + left then "left",
  255 + right then "right"
  256 + }.
  257 +
  258 +
126 public define HTML_Off_Form 259 public define HTML_Off_Form
127 dojo_ContentPane 260 dojo_ContentPane
128 ( 261 (
129 - String id,  
130 - String region,  
131 - Bool splitter,  
132 - HTML_Off_Form content 262 + List(CoreAttrs) attributes,
  263 + BorderContainerRegion region,
  264 + Bool splitter,
  265 + HTML_Off_Form content
133 ) = 266 ) =
134 - sequence([  
135 - literal("<div id=\"" + id + "\" dojoType=\"dijit.layout.ContentPane\" region=\"" + region + "\" splitter=\""  
136 - +(  
137 - if splitter then "true"  
138 - else "false"  
139 - )+  
140 - // "\" style=\"overflow: auto;\""+  
141 - // "\" minSize=\"20em\""+  
142 - "\">"),  
143 - content,  
144 - literal("</div>")  
145 - ]). 267 + div([ attr("dojoType", "dijit.layout.ContentPane"),
  268 + attr("region", to_String(region)),
  269 + attr("splitter", if splitter then "true" else "false") . attributes ],
  270 + content).
  271 +// sequence([
  272 +// literal("<div id=\"" + id + "\" dojoType=\"dijit.layout.ContentPane\" region=\"" + to_String(region) + "\" splitter=\""
  273 +// +(
  274 +// if splitter then "true"
  275 +// else "false"
  276 +// )+
  277 +// // "\" style=\"overflow: auto;\""+
  278 +// // "\" minSize=\"20em\""+
  279 +// "\">"),
  280 +// content,
  281 +// literal("</div>")
  282 +// ]).
146 283
147 public define HTML_Off_Form 284 public define HTML_Off_Form
148 dojo_TabContainer 285 dojo_TabContainer
149 ( 286 (
150 - String id,  
151 - HTML_Off_Form content 287 + List(CoreAttrs) attributes,
  288 + HTML_Off_Form content
152 ) = 289 ) =
153 - sequence([  
154 - literal("<div id=\"" + id + "\" dojoType=\"dijit.layout.TabContainer\" style=\"width:70em;height:50em\">"),  
155 - content,  
156 - literal("</div>")  
157 - ]). 290 + div([attr("dojoType", "dijit.layout.TabContainer") . attributes ],
  291 + content).
  292 +// sequence([
  293 +// literal("<div id=\"" + id + "\" dojoType=\"dijit.layout.TabContainer\" style=\"width:70em;height:50em\">"),
  294 +// content,
  295 +// literal("</div>")
  296 +// ]).
158 297
159 public define HTML_Off_Form 298 public define HTML_Off_Form
160 dojo_BorderContainer 299 dojo_BorderContainer
161 ( 300 (
162 - String id,  
163 - String title,  
164 - HTML_Off_Form content 301 + List(CoreAttrs) attributes,
  302 + String the_title,
  303 + Bool live_splitter,
  304 + Bool persist,
  305 + HTML_Off_Form content
165 ) = 306 ) =
166 - sequence([  
167 - literal("<div id=\"" + id + "\" dojoType=\"dijit.layout.BorderContainer\" title=\"" + title + "\" design=\"sidebar\">"),  
168 - content,  
169 - literal("</div>")  
170 - ]). 307 + div([attr("dojoType", "dijit.layout.BorderContainer"), title(the_title),
  308 + attr("design", "sidebar"), attr("liveSplitters", live_splitter), attr("persist", persist) . attributes ],
  309 + content).
171 310
172 311
173 public define HTML_Off_Form 312 public define HTML_Off_Form
174 dojo_tree 313 dojo_tree
175 ( 314 (
176 - String id, 315 + List(CoreAttrs) attributes,
177 )= 316 )=
178 - literal("<div id=\"" + id + "\"</div>"). 317 + div_empty(attributes).
  318 +// literal("<div id=\"" + id + "\"</div>").
179 319
180 320
181 public define HTML_Off_Form 321 public define HTML_Off_Form
182 dojo_Toolbar 322 dojo_Toolbar
183 ( 323 (
184 - String id, 324 + List(CoreAttrs) attributes,
185 HTML_Off_Form content 325 HTML_Off_Form content
186 )= 326 )=
187 - sequence([  
188 - literal("<div dojoType=\"dijit.Toolbar\" region=\"top\" id =\"" + id + "\">"),  
189 - content,  
190 - literal("</div>")  
191 - ]). 327 + div([attr("dojoType", "dijit.Toolbar") . attributes ],
  328 + content).
  329 +// sequence([
  330 +// literal("<div dojoType=\"dijit.Toolbar\" region=\"top\" id =\"" + id + "\">"),
  331 +// content,
  332 +// literal("</div>")
  333 +// ]).
192 334
193 335
194 public define HTML_Off_Form 336 public define HTML_Off_Form
195 dojo_button 337 dojo_button
196 ( 338 (
197 - String id, 339 + HtmlId html_id,
198 String name, 340 String name,
199 String iconclass, 341 String iconclass,
200 String tip_msg, 342 String tip_msg,
201 ) 343 )
202 = 344 =
203 literal(" 345 literal("
204 - <button dojoType=\"dijit.form.Button\" id=\"" + id + "\" iconClass=\"" + iconclass + "\">" + name + "</button>  
205 - <span dojoType=\"dijit.Tooltip\" connectId=\"" + id + "\">" + tip_msg + "</span>"). 346 + <button dojoType=\"dijit.form.Button\" id=\"" + html_id.id + "\" iconClass=\"" + iconclass + "\">" + name + "</button>
  347 + <span dojoType=\"dijit.Tooltip\" connectId=\"" + html_id.id + "\">" + tip_msg + "</span>").
calexium_lib/web/CXM_making_a_web_site.anubis
@@ -439,7 +439,7 @@ public define Web_Site @@ -439,7 +439,7 @@ public define Web_Site
439 List(Web_arg), 439 List(Web_arg),
440 Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) ticket_lost_state, 440 Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) ticket_lost_state,
441 List(Web_Action($SessionTicket, $State)) actions, 441 List(Web_Action($SessionTicket, $State)) actions,
442 - (Maybe($SessionTicket), Maybe($State), List(Web_arg) lwa) -> HTTP_Answer compute_page, 442 + (Maybe($SessionTicket), Maybe($State), String state_name, List(Web_arg) lwa) -> HTTP_Answer compute_page,
443 Int timeout, // seconds (todo: minutes) 443 Int timeout, // seconds (todo: minutes)
444 List(Redirection) redirections, 444 List(Redirection) redirections,
445 String charset, 445 String charset,
@@ -734,6 +734,8 @@ public type CoreAttrs: @@ -734,6 +734,8 @@ public type CoreAttrs:
734 attr (String, String), 734 attr (String, String),
735 event (HtmlEvents, String). 735 event (HtmlEvents, String).
736 736
  737 +public define CoreAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false").
  738 +
737 public type InputAttrs: 739 public type InputAttrs:
738 class (String), 740 class (String),
739 style (String), 741 style (String),
@@ -745,6 +747,8 @@ public type InputAttrs: @@ -745,6 +747,8 @@ public type InputAttrs:
745 attr (String, String), 747 attr (String, String),
746 event (HtmlEvents, String). 748 event (HtmlEvents, String).
747 749
  750 +public define InputAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false").
  751 +
748 public define CoreAttrs 752 public define CoreAttrs
749 tooltip(String s) = title(s). 753 tooltip(String s) = title(s).
750 public define InputAttrs 754 public define InputAttrs
@@ -2219,7 +2223,7 @@ public define Web_Site @@ -2219,7 +2223,7 @@ public define Web_Site
2219 List(Web_arg), 2223 List(Web_arg),
2220 Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) ticket_lost_state, 2224 Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) ticket_lost_state,
2221 List(Web_Action($SessionTicket, $State)) actions, 2225 List(Web_Action($SessionTicket, $State)) actions,
2222 - (Maybe($SessionTicket), Maybe($State), List(Web_arg) lwa) -> HTTP_Answer compute_page, 2226 + (Maybe($SessionTicket), Maybe($State), String state_name, List(Web_arg) lwa) -> HTTP_Answer compute_page,
2223 Int timeout, 2227 Int timeout,
2224 Redirections redirections, 2228 Redirections redirections,
2225 String charset, 2229 String charset,
@@ -2295,7 +2299,7 @@ public define Web_Site @@ -2295,7 +2299,7 @@ public define Web_Site
2295 format(info(host_name, http_port, https_port, site_directory, secret), 2299 format(info(host_name, http_port, https_port, site_directory, secret),
2296 state_name, 2300 state_name,
2297 headers, 2301 headers,
2298 - compute_page(session_ticket, mb_new_state, operands), 2302 + compute_page(session_ticket, mb_new_state, state_name, operands),
2299 is_https, 2303 is_https,
2300 charset) 2304 charset)
2301 }), 2305 }),